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

我有一个备份脚本,用于创build以创builddate命名的文件,格式为backups_YYYYMMDD.tar.gz

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

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

我怎样才能改变这个只清除那个月的第一个月没做的文件? 即任何匹配“备份_ ?????? 01.tar.gz”的东西仍然存在。

你可以用简单的globbing来完成,就像你现在使用的一样:

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

“查找超过30天的文件,并命名为FOO,而不是命名为BAR,并删除它们。”

假设你在下面的所有目录中都有备份文件,你可以这样做:

 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。