次のように、名前がYYYYMMDDで始まるファイルがあります。
20160221_143223_Report.csv
20160222_121223_Report.csv
...
20160229_141223_Report.csv
20160301_171223_Report.csv
ファイル名に「Report」が含まれ、名前が1〜8日前の範囲に対応するファイルをtarしたい。例:今日は3月1日なので、2月22日から2月29日までファイルをtarします(今日は含まれません)。
files=($(ls |<HAS "Report" in filename> and <WITHIN `date -d "8 days ago" '+%Y%m%d'> )) #output will be filenames that has the Word "Report" and from 22th to 29th FEB
tar cvfz oldfile.tar.gz "${files[@]}"
私が一致させるべきパターンは何ですか?
find
を自分で実行したい場合は、おそらく最善の策です。
find . -name '*Report.csv' -mtime +8 | xargs tar -czvf oldfile.tar.gz
logrotate
と呼ばれる古いファイルをクリアするためのかなり標準的なツールもあります。これは、フォルダー内のパターンに一致し、古いファイルの圧縮や履歴の削除など、さまざまな整理を行うことができます。