我在cron作业中有这个删除超过30天的数据库:
find /my/backup/path/* -mtime +30 -exec rm {} \;
如果在本月的第一天没有进行备份,我该怎么修改它才能删除文件?
E.G。我想每天备份一次数据库(仅限一个月),每个月备份一次:
我有什么想法可以做到这一点吗?
答案 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
命令退出状态为零时才适用。