2017-03-06 62 views
0

1日我有這樣的cron作業刪除數據庫超過30天:刪除超過30天,如果不是一個月

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

我怎麼能修改此僅刪除文件,如果備份未在本月的第一個月?

E.G.我想擁有的數據庫(僅一個月)每日備份PLUS每月備份:

  • 月/ 1的備份
  • 月/ 1的備份
  • 月/ 6的備份(這是目前第6 3月)

任何想法,我可以做到這一點?

回答

0

我不能想辦法來修改你的「查找」命令/ cron作業,但您可以:

  • 創建移動每月備份文件的另一個cron作業(採取月1日)到另一個名爲say/my/backup/monthly_backups的目錄。然後,當您的查找/刪除cron作業運行時,它不會找到該月1日採取的一個

  • 另一種方法是修改備份腳本以不同的方式命名每月備份,以便它們不匹配「在cron作業中找到「標準,因此不會被刪除。

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

這應該與任何有效的文件名一起使用。 '{}'作爲真實參數傳遞給shell,而不是動態插入到命令中。 – chepner

+0

對!我剛剛學到了一些東西,謝謝:) – Alfe

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命令有一個零退出狀態適用。

相關問題