删除超过 7 天的备份(每月第一天除外)

删除超过 7 天的备份(每月第一天除外)

我想删除超过 7 天的备份但保留每月的第一天的备份。

文件的名称是:name_$(date +\%d\%m\%Y).tar.gz

我想保留:name_$(date +\01\%m\%Y).tar.gz

我想要这样的东西:

find /path -mtime +8 -exec rm {} \;

我可以融入哪里name_$(date +\01\%m\%Y).tar.gz

也许使用--exclude name_$(date +\01\%m\%Y).tar.gz

我正在寻找一行命令。

不想要子目录。

用 echo 尝试了一下,效果不佳,但它显示了部分 01。

只是--exclude不起作用:command not found

答案1

这在 Debian/Ubuntu 下对我有效(并且应该在大多数情况下有效):

例如,如果您有以下格式的文件:

我的备份_2015 年 12 月 1 日压缩文件

 $ find ./* -name 'mybackup_??-01-*' -prune -o -mtime +7 -exec ls {} \;

命令:

  • 查找从当前文件夹开始的所有文件
  • 删除(忽略/排除)日期匹配为“01”的文件
  • 并且仅包括≥7天(mtime)的文件
  • 执行ls以显示剩余的内容。

如果您想在测试命令后删除它们,只需替换lsrm

如果您对命令感到满意,它也可以很好地用作 cron 任务/作业。我让它每几个月执行一次我的脚本。(我的脚本使用 +90 天的 mtime 来清理 mysql 备份)

答案2

删除除月初以外 7 天以上的文件。

find . ! -name '*01.tar.gz' -mtime +7 -exec rm {} \;

这确实:

  • find .:在当前目录中执行查找。替换.为任何其他目录。
  • !(相当于-not):反转下一步操作。
  • -name '*01':查找以 结尾的文件01.tar.gz。在我的例子中,文件以 dateYYYYMMDD格式结尾,因此这会过滤掉每个月的第一个文件。需要使用引号,这样 bash 就不会扩展星号。由于之前的 ,此过滤器被否定!
  • -mtime +7:过滤超过7天的文件。
  • -exec rm {} \;rm对每个选定文件执行。测试获取选定文件列表时,请删除此选项。

删除除月初以外 7 天前的目录。

在我的例子中,我的 mongodb 备份存储在单独的目录中。为了清除旧文件,我执行了以下命令:

find . -maxdepth 1 ! -name 'db_backup_*01' -mtime +7 -exec rm -r {} \;

主要变化:

  • -maxdepth 1:这将目录深度搜索限制为 1,这意味着搜索将限制在当前目录中。
  • -exec rm -r {} \;:若要删除目录,-r需要参数rm

相关内容