在带有条件的单行中查找、压缩和删除

在带有条件的单行中查找、压缩和删除

我试图将脚本简化为一行,它可以根据条件递归地查找昨天创建的文件、压缩、移动和删除。

我有这样的结构:

../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}\*

请注意缺少的硬引号以及转义星号的需要。

相关内容