Shell

shell find -delete ‘目錄不為空’

  • July 7, 2018

我嘗試刪除 Synology NAS 上超過 30 天的備份文件。這些文件位於從我的網路伺服器下載備份文件期間創建的目錄中。

下載後,我想檢查 -mtime 然後刪除舊文件。

腳本來了:

#!/bin/sh

## Datum auslesen
datum=`date +%Y-%m-%d_%H-%M`

## Mit wget die Datei AutoBackupDB-1.zip laden und in einem Ordner mit Datum uns Uhrzeit speichern 
wget -m -P /volume1/Austauschordner/backup_xyz/$datum/ ftp://backup:backup@domain.tdl/AutoBackupDB-1.zip
echo "Backup von xyz wurde erstellt! "

## finde alle Ordner in einem angegebenen Verzeichnis mit dem Suchnamen die älter als die angegebenen Tage sind und lösche diese
find /volume1/Austauschordner/ -type d -name 'backup_*' -ctime +30 -delete

如果我執行此腳本,它會告訴我“目錄不為空”,並且不會刪除任何內容。

是否有一種簡單的方法或選項可以刪除目錄中的所有內容?

正如@Stephen Kitt 所提到的,這在很大程度上是find -delete does not delete non-empty directory的副本,它聲明您告訴它刪除目錄,但目錄不是空的(就像沒有執行rm some_nonempty_directory就無法工作一樣-r 標誌至少)。

話雖如此,如果您替換-delete-exec rm -rv {} +or-exec rm -rv {} \;然後您的腳本應該遞歸地刪除目錄而不會出錯(v如果您不想要詳細輸出,請在測試後刪除該標誌)。

注意:最後的會+導致rm -rv file1 file2 ...while的動作\;``rm -rv file1; rm -rv file2; ...

引用自:https://unix.stackexchange.com/questions/249501