删除早于特定日期的文件,这些文件名称中没有某些子字符串(Linux)

时间:2017-12-11 11:05:42

标签: linux terminal grep cron find

我有一个包含备份文件的文件夹,其名称如下:

backup_2017_12_01__09_00_01.sql.gz
backup_2017_12_01__10_00_01.sql.gz
...
backup_2017_12_01__19_00_01.sql.gz
backup_2017_12_01__20_00_01.sql.gz

backup_2017_12_02__09_00_01.sql.gz
backup_2017_12_02__10_00_01.sql.gz
...
backup_2017_12_02__19_00_01.sql.gz
backup_2017_12_02__20_00_01.sql.gz

等等。

我有一个cron应该执行删除遵守这些规则的文件:

  1. 删除超过45天的所有文件;用find. -mtime +45 -exec rm {} \;
  2. 解决
  3. 删除所有超过7天的文件,但名称中包含字符串__20_的文件(晚上的最后一次备份)除外;基于最后修改时间而不是名称的命令也没问题
  4. 有人可以在第二点帮助我吗?

    感谢。

2 个答案:

答案 0 :(得分:0)

使用 find -name测试:

find . -type f -name "*.gz" ! -name "*__20_*.gz" -mtime +7 -delete

答案 1 :(得分:0)

find /p/a/t/h \( -mtime +45 -o \( -mtime +5 ! -name '*__20_*' \) \) -delete

如果你愿意,你可以更明确:

find /p/a/t/h \( -mtime +45 -o \( -mtime +5 -and ! -name '*__20_*' \) \) -delete

请注意,您应该更准确地使用语言。这不会删除超过45天"的文件。它会根据修改时间删除文件,这可能与年龄大不相同。