ファイルの日付に基づいてファイルを圧縮する方法

ファイルの日付に基づいてファイルを圧縮する方法

ディレクトリ内に、過去 7 日間の古い日付を含むファイルが少なくとも 30 個あります。ファイルの作成日/変更日に基づいてそれらを圧縮する必要があります。

たとえば、
4 月 7 日のファイルが 10 個ある場合、april7.zip の zip を作成します。4
月 8 日のファイルが 10 個ある場合、april8.zip の zip
を作成します。4 月 9 日のファイルが 10 個ある場合、april9.zip の zip を作成します。

答え1

通常の方法はfind -mtime、現在の時点に対する年齢のみをテストするため、ここでは少し使いにくいです。

GNU date と Bash を使用すると、次のようにして各ファイルをファイルの日付に対応するアーカイブに追加できます。

for f in * ; do 
    zip $(date -r "$f" +%F).zip "$f"        # 2017-04-07.zip
done

または:

for f in * ; do
    d=$(date -r "$f" +%B%d)
    zip ${d,,}.zip "$f"                     # april07.zip
done                                        # ${var,,} is for lowercase

(date変更時刻のみを読み取ることができます。ctimeを使用しstat、出力形式を修正するためのさらなる作業を行う必要があるためです。)


何らかの理由で、処理する前に特定の日付のすべてのファイルのリストを取得する必要がある場合は、それらを配列に収集できます。

files=()
date="2017-04-07"
for f in * ; do 
    [ "$(date -r "$f" +%F)" = "$date" ] && files+=("$f")
done
# do something with "${files[@]}', e.g.
# zip $date.zip "${files[@]}"

そのため、一度に 1 つの日付のみが処理されます。

関連情報