發現不透過bash腳本刪除資料夾中的文件

發現不透過bash腳本刪除資料夾中的文件

我對 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

相關內容