Linux shell脚本:删除名称中不包含“01”的所有文件

Linux shell脚本:删除名称中不包含“01”的所有文件

我有一个备份脚本,它以创建日期命名的文件,格式为 backups_YYYYMMDD.tar.gz

我目前使用以下命令清除超过 30 天的所有内容:

find /backups -mtime +30 -name "backups_????????.tar.gz" -delete

我该如何改变它来清除那些不是在每月第一天制作的文件?即任何与“backups_??????01.tar.gz”匹配的文件都会保留下来。

答案1

您可以按照现在使用的方式,通过简单的通配符来实现:

find /backups -mtime +30 -name "backups_????????.tar.gz" ! -name "backups_??????01.tar.gz" -delete

“查找已存在超过 30 天且名为 FOO 而不是名为 BAR 的文件并将其删除。”

答案2

假设您在下面的所有目录中都没有备份文件,您可以执行以下操作:

find . -type f -regextype posix-egrep ! -regex ".*backups_[0-9]{6}01.tar.gz" -name '*.tar.gz' -print0 | xargs -0 rm 

如果不知道这些目录中的所有文件,就很难说清楚,所以先运行它而不使用 rm!您可能希望将最后的 *.tar.gz glob 修改为更接近原始 glob 的内容。

相关内容