Shell

如何從目錄中刪除所有子目錄?

  • July 3, 2020

這個問題是我在這裡發布的第一個問題的第二階段

我有一個目錄,其中包含一堆子目錄、.zip 文件和其他不包含在子目錄中的隨機文件。

我想要一個命令行腳本來從父目錄中刪除所有子目錄,但保留所有不屬於任何子目錄的 zip 文件和鬆散文件。所有子目錄都有內容,所以我相信我需要使用 -f 命令強制刪除它們。

所以基本上,一個查看父目錄(或目前目錄)的命令會刪除其中的所有文件夾,但保留所有其他不是文件夾或包含在文件夾中的內容和文件。

我知道從命令行刪除項目需要特別小心,但我已經採取了所有必要的預防措施來遠端備份。

在 BASH 中,您可以使用斜杠(我認為它應該適用於任何 POSIX shell):

rm -R -- */

請注意,--它將選項與參數分開,並允許刪除以連字元開頭的條目 - 否則在由 shell 擴展後,條目名稱將被解釋為選項rm(對於許多其他命令行實用程序也是如此)。

-f如果您不想在刪除不可寫文件時被提示確認,請添加該選項。

請注意,預設情況下,隱藏目錄(名稱以 開頭的目錄.)將被單獨保留。

一個重要的警告:擴展*/還將包括最終解析為目錄類型文件的符號連結。並且根據rm實現,rm -R -- thelink/將僅刪除符號連結,或者(在大多數情況下)遞歸刪除連結目錄的內容,但不刪除該目錄本身或符號連結。

如果使用zsh,更好的方法是使用glob 限定符僅選擇目錄類型的文件:

rm -R -- *(/) # or *(D/) to include hidden ones

或者:

rm -R -- *(-/)

包含指向目錄的符號連結(但是因為這次擴展沒有尾隨/s,所以只有符號連結在所有rm實現中都被刪除)。

使用bash, AT&T kshyash或者zsh您可以執行以下操作:

set -- */
rm -R -- "${@%/}"

剝離尾隨/.

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