删除超过30天,如果不是1月1日

时间:2017-03-06 10:36:29

标签: mysql bash backup

我在cron作业中有这个删除超过30天的数据库:

find /my/backup/path/* -mtime +30 -exec rm {} \;

如果在本月的第一天没有进行备份,我该怎么修改它才能删除文件?

E.G。我想每天备份一次数据库(仅限一个月),每个月备份一次:

  • Jan / 1备份
  • 2月1日备份
  • 3月/ 6日备份(目前是3月6日)

我有什么想法可以做到这一点吗?

3 个答案:

答案 0 :(得分:1)

rm_if_not_on_1st() {
  [ "$(stat -c %y "$1" | cut -c9-10)" = "01" ] || rm "$1"
}
export -f rm_if_not_on_1st

find /my/backup/path/* -mtime +30 -exec bash -c 'rm_if_not_on_1st "$1"' _ {} \;

答案 1 :(得分:0)

我无法想出一种方法来修改你的"发现"命令/ cron作业,但你可以:

  • 创建另一个cron作业,将每月备份文件(在1月1日拍摄)移动到名为say / my / backup / monthly_backups的另一个目录。然后,当您的查找/删除cron作业运行时,它将无法找到本月1日拍摄的作业

  • 另一种选择是修改备份脚本,以不同方式命名每月备份,以便它们不匹配" find" cron作业中的标准因此无法删除。

答案 2 :(得分:0)

-exec也是一个过滤器:执行命令的退出状态是主要的结果。我会调整Alfe's answer来证明:

date_is_not_the_first () {
  [ "$(stat -c %y "$1" | cut -c9-10)" != 01 ]
}

find /my/backup/path/* -mtime +30 -exec bash -c 'date_is_not_the_first "$1"' _ {} \; -delete

-delete选项仅在-mtime为真且-exec命令退出状态为零时才适用。