
我對 bash 腳本非常陌生,而且我真的很堅持 Ubuntu 中的 find 方法。我想在資料夾中搜尋/opt/
所有資料夾,看看它們是否早於特定日期。如果它們較舊,則應刪除此資料夾中的檔案(實際上也刪除資料夾本身)。如果日期仍然太新,則不應觸及文件。
我的程式碼中有什麼:
find $BACKUP_DIR -maxdepth 1 -mtime +$DAYS_TO_KEEP -name "*$mystring" -exec rm -rf '{}' ';'
這些變數包含以下值:
BACKUP_DIR=/opt/
TESTDIR=2014-11-25-daily_testmachine
mystring=-daily_testmachine
如果變數$DAYS_TO_KEEP
為 2,則日期為 2014-11-25,資料夾名稱為該2014-11-20-daily_testmachine
資料夾,並且應刪除其內容。
我做錯了什麼, find 沒有刪除/尋找要刪除的這些檔案和資料夾?我似乎找不到錯誤。
筆記:如果我使用其中資料夾的確切字串名稱執行命令,則該資料夾將被刪除。所以我的格式或命名有問題。
find $BACKUP_DIR -maxdepth 1 -name "2014-11-20-daily_testmachine" -exec rm -rf '{}' ';'
為了讓事情更清楚,我製作了一個螢幕截圖來顯示設定:
答案1
我的錯誤是邏輯錯誤-mtime
。我以為我的腳本正在檢查名稱,但-mtime
檢查檔案建立的日期。所以我的最終程式碼:
DAYS_TO_KEEP=2
find $BACKUP_DIR -maxdepth 1 -mtime +"$DAYS_TO_KEEP" -exec rm -rf {} \;
我只需要做一個sudo touch -d "3 days ago" /filepath/folderToRemove
就能-mname
找到資料夾和確保該文件足夠舊,可以刪除。所以最後的程式碼會刪除所有比我的變數舊的資料夾$DAYS_TO_KEEP