我试图将脚本简化为一行,它可以根据条件递归地查找昨天创建的文件、压缩、移动和删除。
我有这样的结构:
../main -> child1 (content: file01.csv, file02.xlsx, file03_20201028.xls, file04_20201028.xls)
|____ child2 (content: file05.xls, file06.xlsx, file07_20201028)
|___ child3 (file08.xls, file09.xlsx, file10_20201028.xls, file11_20201028.xls)
我做了这个:
find $ORIGINPATH -type f -mtime -1 | zip -@ $ORIGINPATH/Backup_$YESTERDAY.zip
find $ORIGINPATH -type f -iname *$YESTERDAY* -exec rm -f {} \;
mv $ORIGINPATH/Backup_$YESTERDAY.zip $DESTINATIONPATH
我需要删除名称中带有日期的文件并保留其余文件。
提前致谢!
答案1
对于单行,这将起作用:
find $ORIGIN -type f -mtime -1 -exec zip -u ${DEST}/backup_${YESTERDAY}.zip '{}' \; -delete
zip
您将从第一个文件中收到错误,因为-u
通常会更新现有档案(但如果不存在则创建一个并返回警告)。
请注意,它-mtime -1
并不关心日期,而是关心过去 24 小时!因此,如果您在 23:59h 运行它,您将删除今天的文件!如果要搜索日期字符串,请使用以下选项:
假设我们的字符串定义为YESTERDAY=20201028
find $ORIGIN -type f -name \*${YESTERDAY}\*
请注意缺少的硬引号以及转义星号的需要。