我有一些文件的名称以 YYYYMMDD 开头,如下所示:
20160221_143223_Report.csv
20160222_121223_Report.csv
...
20160229_141223_Report.csv
20160301_171223_Report.csv
我想要压缩文件名中包含“Report”且名称对应 1-8 天前的文件。例如:今天是 3 月 1 日,所以我想要压缩 2 月 22 日至 2 月 29 日(不包括今天)的文件。
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[@]}"
我应该匹配什么样的模式?
答案1
find
如果你想自己运行它,可能是最好的选择:
find . -name '*Report.csv' -mtime +8 | xargs tar -czvf oldfile.tar.gz
还有一个非常标准的清理旧文件的工具,logrotate
它可以匹配文件夹中的模式并进行各种整理,包括压缩旧文件和删除历史记录。