刪除目錄內容的正確方法

刪除目錄內容的正確方法

正確的刪除方法是什麼全部目錄的內容,沒有說目錄?
例如,我有以下目錄結構:

foo/
    bar1/
    bar2/
    x.txt

我想刪除資料夾bar1bar2文件x.txt不刪除 foo

另請考慮帶有可能被忽略或引發錯誤的特殊字元的檔案名稱。


編輯#1(9 月 30 日,18:26 UTC):
我認為我的問題不是重複的這個問題,因為我要求刪除一切在目錄內,而另一個問題沒有,答案也不包含這樣的解決方案。

答案1

如果您知道可以使用以下命令之一執行的目錄:

$ find foo/* -delete

$ rm -fr foo/*

$ find foo/* -exec rm -fr {} +

如果您的文件以點 ( .) 開頭,那麼您將需要rm.

$ rm -fr foo/{*,.*}

例子

$ ls -l foo
drwxrwxr-x    6 saml saml  4096 Sep 27 09:43 .
drwx------. 263 saml saml 32768 Sep 27 09:42 ..
drwxrwxr-x    2 saml saml  4096 Sep 27 09:43 dir1
drwxrwxr-x    2 saml saml  4096 Sep 27 09:43 dir2
drwxrwxr-x    2 saml saml  4096 Sep 27 09:43 dir space1
drwxrwxr-x    2 saml saml  4096 Sep 27 09:43 dir space2
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 .dot space1
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 .dot space2
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 file1
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 file2
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 file space1
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 file space2

$ rm -fr foo/{*,.*}
rm: cannot remove directory: `adir/.'
rm: cannot remove directory: `adir/..'
$

$ ls -l foo/
total 0
$

使用新的檔案目錄重複:

$ find foo/* -delete
$

處理特殊字符

如果你有一個名為foo tastic有空格的目錄,你可以引用它,但仍然使用通配符:

例子

$ rm -fr "foo tastic"/*

特殊字元

在運行檔案名稱混合物之前,我經常使用這個技巧來查看 shell 對它們的看法。在我上面使用的範例目錄中:

$ ls -1 "檔案"* 文件空間1 文件空間2

$ ls -1d“dir”* 目錄空間1 目錄空間2

透過事先進行這些測試,您可以了解使用包含 glob 的命令時將使用哪些檔案/目錄。

相關內容