web-dev-qa-db-ja.com

シェルfind -delete "空ではないディレクトリ"

Synologyのバックアップファイルを削除しようとしていますNAS 30日以上経過しています。ファイルは、Webサーバーからバックアップファイルをダウンロードするときに作成されるディレクトリにあります。
ダウンロード後、-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:[email protected]/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

このスクリプトを実行すると、「ディレクトリが空ではない」というメッセージが表示され、何も削除されません。

ディレクトリ内のすべてを削除する簡単な方法またはオプションはありますか?

30
grandd

@Stephen Kittが言及しているように、これは主に find -deleteは空でないディレクトリを削除しない の複製です。これは、ディレクトリを削除するように指示していることを示していますが、ディレクトリは空ではありません(ちょうどrm some_nonempty_directoryの実行と同様に、少なくとも-rフラグがないと機能しません)。

つまり、-delete-exec rm -rv {} +または-exec rm -rv {} \;で置き換えると、スクリプトはエラーなしで再帰的にディレクトリを削除する必要があります(詳細が必要ない場合は、vフラグを削除してください)テスト後の出力)。

注:末尾の+rm -rv file1 file2 ...となり、\;のアクションはrm -rv file1; rm -rv file2; ...になります。

43
Jason Rush