Find
刪除所有包含匹配模式文件的文件夾
我正在嘗試刪除目前工作目錄中包含 rar 文件的所有子目錄。
我的第一次嘗試:
find -name *.rar -exec rm -r {}/.. ';'
失敗,因為那不是一個有效的目錄。我嘗試使用dirname {}
更明智的命令,但決定在幾乎刪除我不想刪除的內容後詢問。我在 Windows 7 上使用 Cygwin。
使用 zsh:
rm -rf **/*.rar(:h)
後綴
:h
應用歷史擴展修飾符h
(“head”),它刪除每個匹配的基本名稱,只保留目錄部分。確保檢查這些確實是您要刪除的目錄!例如,首先將它們移動到臨時目錄:
mkdir DELETE mv **/*.rar(:h) DELETE/ # check that you really want to delete everything in DELETE rm -r DELETE
您可以使用find
bash -c
和 for 執行更高級的操作。-exec
將臨時文件和 cat 結合使用的問題xargs
是,如果文件包含空格、換行符或製表符,它將中斷。以下應該有效:find . -type f -name '*.rar' -exec bash -c 'rm -rf "${@%/*}"' -- {} +
使用
+
for find 和 “$@” 將rm
像 with 一樣執行一次xargs
。