web-dev-qa-db-ja.com

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

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

例えば、
4月7日のファイル10個-april7.ZipのZipを作成
4月8日の10ファイル-april8.ZipのZipを作成します
4月9日の10ファイル-april9.ZipのZipを作成します

4
Dev

いつもの find -mtimeは、現時点での経過時間をテストするだけなので、ここで使用するのは少し難しいです。

GNU date and 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つの特定の日付のみを処理します。

4
ilkkachu