Find

刪除所有包含匹配模式文件的文件夾

  • March 9, 2019

我正在嘗試刪除目前工作目錄中包含 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

您可以使用findbash -c和 for 執行更高級的操作。-exec將臨時文件和 cat 結合使用的問題xargs是,如果文件包含空格、換行符或製表符,它將中斷。以下應該有效:

find . -type f -name '*.rar' -exec bash -c 'rm -rf "${@%/*}"' -- {} +

使用+for find 和 “$@” 將rm像 with 一樣執行一次xargs

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