Linuxには、ファイル名がYYYYMMDD日付で始まるファイルがあります。
20160201_001.pdf
20160110_002.pdf
20150201_003.pdf
20140201_004.pdf
次の日付範囲より小さいファイルを圧縮したいです(mtimeを使用せずにファイル名期間を使用します)。
date +'%Y%m' -d '4 months ago' (201511)
基本的にやりたいこと
files=($(find . -name filename< date +'%Y%m' -d '4 months ago'))
tar cvfz backup.tar.gz "${files[@]}"
ファイル圧縮の推定結果:
20150201_003.pdf
20140201_004.pdf
どうすればいいですか?
ベストアンサー1
その日付形式を使用すると、文字列ソートを使用できますawk
。たとえば、次のようになります。
files=( $(ls | awk -v d=$(date -d '4 months ago' +%Y%m%d_999.pdf) '$1<d {print;}') )
tar cvfz backup.tar.gz "${files[@]}"
プログラムawk
は入力行を読み取り、ルールを適用します。この場合、d
クリップの日付はファイル名に拡張されるため、変数セットを最初に呼び出します。次に、各行に対して最初の単語($1
)をクリップの日付(d
)とアルファベット順で比較し、入力がクリップの前に来る場合はその行を印刷します(そうでない場合は印刷されません)。
毎月クリップするには、4ヶ月前の月を除外するか、4ヶ月前の月を含めるように%d
変更します。00
99