1日我有這樣的cron作業刪除數據庫超過30天:刪除超過30天,如果不是一個月
find /my/backup/path/* -mtime +30 -exec rm {} \;
我怎麼能修改此僅刪除文件,如果備份未在本月的第一個月?
E.G.我想擁有的數據庫(僅一個月)每日備份PLUS每月備份:
- 月/ 1的備份
- 月/ 1的備份
- 月/ 6的備份(這是目前第6 3月)
任何想法,我可以做到這一點?
1日我有這樣的cron作業刪除數據庫超過30天:刪除超過30天,如果不是一個月
find /my/backup/path/* -mtime +30 -exec rm {} \;
我怎麼能修改此僅刪除文件,如果備份未在本月的第一個月?
E.G.我想擁有的數據庫(僅一個月)每日備份PLUS每月備份:
任何想法,我可以做到這一點?
我不能想辦法來修改你的「查找」命令/ cron作業,但您可以:
創建移動每月備份文件的另一個cron作業(採取月1日)到另一個名爲say/my/backup/monthly_backups的目錄。然後,當您的查找/刪除cron作業運行時,它不會找到該月1日採取的一個
另一種方法是修改備份腳本以不同的方式命名每月備份,以便它們不匹配「在cron作業中找到「標準,因此不會被刪除。
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"' _ {} \;
-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
命令有一個零退出狀態適用。
這應該與任何有效的文件名一起使用。 '{}'作爲真實參數傳遞給shell,而不是動態插入到命令中。 – chepner
對!我剛剛學到了一些東西,謝謝:) – Alfe