bash:刪除不包含給定字串的目錄

bash:刪除不包含給定字串的目錄

如何使用 bash 刪除不包含名為 wav 或 mp3 的目錄的目錄?我使用 macOS Sierra。

find . -type d \! -exec test -e '{}/wav' \; -print尋找不包含 wav 目錄的目錄。如何將 mp3 包含到此命令中?我怎麼刪除生成的目錄?

我的音樂庫遵循以下結構: /Musik/<Artist>/<format>/<Artist---Album>/<Track_Titel.wav>,其中格式為 wav 或 mp3。有許多目錄沒有任何音訊檔案但覆蓋,例如因此我不能只搜尋空目錄來刪除那些不包含音訊檔案的目錄。

答案1

首先,在你這樣做之前,備份您的檔案。

嚴重地。


尋找並刪除不直接包含目錄的 Artist 目錄(及其內容,遞歸地)(或者文件)標題為wavmp3(案例敏感的),請嘗試以下操作:

find /Musik -mindepth 1 -maxdepth 1 -exec test \! -e {}/wav \; -exec test \! -e {}/mp3 \; -print

只有在你擁有之後確認輸出符合您希望刪除的目錄(並仔細檢查你的備份)然後你應該運行:

find /Musik -mindepth 1 -maxdepth 1 -exec test \! -e {}/wav \; -exec test \! -e {}/mp3 \; -exec rm -rf {} \;

答案2

對於 2 個測試,運行測試兩次,如果兩者都失敗,則執行以下操作:

find . -type d -exec bash -c "test -f \"{}\"/*wav || test -f \"{}\"/*mp3 || test -d \"{}\"/* || rm -rf \"{}\"" \;

相關內容