2016-10-29 4 views
3

私は毎日ファイルが届くディレクトリを持っています。今度はそれらのファイルを日付順に圧縮したいと思います。同じ日付に着陸したファイルをグループ化/一覧表示する方法はありますか?ファイルのリストを日付でグループに取得する

ディレクトリ内のファイル

-rw-r--r--. 1 anirban anirban 1598 Oct 14 07:19 hello.txt 
-rw-r--r--. 1 anirban anirban 1248 Oct 14 07:21 world.txt 
-rw-rw-r--. 1 anirban anirban 659758 Oct 14 11:55 a 
-rw-rw-r--. 1 anirban anirban 9121 Oct 18 07:37 b.csv 
-rw-r--r--. 1 anirban anirban  196 Oct 20 08:46 go.xls 
-rw-r--r--. 1 anirban anirban 1698 Oct 20 08:52 purge.sh 
-rw-r--r--. 1 anirban anirban 47838 Oct 21 08:05 code.java 
-rw-rw-r--. 1 anirban anirban 9446406 Oct 24 05:51 cron 
-rw-rw-r--. 1 anirban anirban 532570 Oct 24 05:57 my.txt 
drwxrwsr-x. 2 anirban anirban  67 Oct 25 05:05 look_around.py 
-rw-rw-r--. 1 anirban anirban 44525 Oct 26 17:23 failed.log 

下にあると仮定ので、グループへの道は、ファイルには、すべてが一意であることから、任意の接尾辞/プレフィックスではありません。今私が求めているコマンドを実行するときに、グループごとに日付順に以下のような一連の行を取得します。そのリストで

[ [hello.txt world.txt a] [b.csv] [go.xls purge.sh] [code.java] ... ] and so on. 

私はなりループを通過し、あなたがdateコマンドのGNUバージョンを使用している場合、あなたは-rフラグ付きのファイルの変更の日付を取得することができますアーカイブ

tar -zvcf Oct_14.tar.gz hello.txt world.txt a 
+0

日付に基づいて別のディレクトリにファイルを置くことができればそれは役に立ちますか? –

+0

@SulavTimsinaもしあなたがそのコードを与えることができれば、私はそれらを圧縮することができます:) –

答えて

2

行い、非常に便利なことがあります。 たとえば、質問にファイルリストがある場合、date +%b_%d -r hello.txtOct_14を出力します。

これを使用して

、あなたがファイルをループ可能性があり、ビルドアップtarファイル:

  • tarファイルが存在しない場合は、単一のファイル
  • tarファイルが存在する場合にそれを作成し、

    #!/usr/bin/env bash 
    
    tarfiles=() 
    
    for file; do 
        tarfile=$(date +%b_%d.tar -r "$file") 
        if ! [ -f "$tarfile" ]; then 
         tar cf "$tarfile" "$file" 
         tarfiles+=("$tarfile") 
        else 
         tar uf "$tarfile" "$file" 
        fi 
    done 
    
    for tarfile in "${tarfiles[@]}"; do 
        gzip "$tarfile" 
    done 
    
    :tarはこのよう

をファイルZIP、そのループの後

  • にファイルを追加

    たとえば、/path/to/filesがファイル(質問に記載されている)をアーカイブするディレクトリである場合、このスクリプトを~/bin/tar-by-dates.shに保存すると、コマンドラインパラメータとしてアーカイブするファイルのリストを渡して、次のように使用できますこの:

    cd /path/to/files 
    ~/bin/tar-by-dates.sh * 
    
  • +0

    少なくとも私が実行しているときにコードにエラーはコンソールには何も出ていません。 'set -x'で試してみましたが、何らかの理由でforループに入っていません。 –

    +0

    アーカイブするファイルのリストをコマンドラインパラメータとして渡します。私はもう少し説明を加えました。 – janos

    +0

    このスクリプトに囲まれた別のスクリプトを記述し、必要なコマンドを入力します。ファイルから設定を読み込んでcronジョブで使用する方法の詳細な手順が必要な場合は、別の質問に本当に属していると思います。 – janos

    0

    (Month_Day.tarのFILENAME)のゼロ区切りリストを作成してペアと対応するアーカイブに各ファイルを追加するxargsのを使用します。

    find . -maxdepth 1 -mindepth 1 -type f -printf "%Tb%Td.tar\0%f\0"|xargs -n 2 -0 tar uf 
    
    関連する問題