我有一个备份脚本,它以创建日期命名的文件,格式为 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 的内容。