3ヶ月未満のLinux tarファイル(ファイル名に日付を使用)

3ヶ月未満のLinux tarファイル(ファイル名に日付を使用)

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変更します。0099

おすすめ記事