Linux

Linux shell腳本:刪除名稱中沒有“01”的所有文件

  • August 20, 2010

我有一個備份腳本,它以 backups_YYYYMMDD.tar.gz 格式創建以創建日期命名的文件

我目前使用這樣的命令清除超過 30 天的所有內容:

find /backups -mtime +30 -name "backups_????????.tar.gz" -delete

如何更改它以僅清除不是在本月第一天製作的文件?即任何匹配“backups_??????01.tar.gz”的東西都會保留。

您可以像現在使用它一樣使用簡單的 globbing 來完成它:

find /backups -mtime +30 -name "backups_????????.tar.gz" ! -name "backups_??????01.tar.gz" -delete

“找到超過 30 天且名為 FOO 而不是 BAR 的文件並刪除它們。”

假設您注意到但備份了下面所有目錄中的文件,您可以執行以下操作:

find . -type f -regextype posix-egrep ! -regex ".*backups_[0-9]{6}01.tar.gz" -name '*.tar.gz' -print0 | xargs -0 rm 

在不知道這些目錄中的所有文件的情況下很難準確地說出來,所以首先在沒有 rm 的情況下執行它!您可能希望將最後一個 *.tar.gz glob 修改為更接近原始 glob 的內容。

引用自:https://serverfault.com/questions/172570