![刪除目錄內容的正確方法](https://rvso.com/image/50569/%E5%88%AA%E9%99%A4%E7%9B%AE%E9%8C%84%E5%85%A7%E5%AE%B9%E7%9A%84%E6%AD%A3%E7%A2%BA%E6%96%B9%E6%B3%95.png)
正確的刪除方法是什麼全部目錄的內容,沒有說目錄?
例如,我有以下目錄結構:
foo/
bar1/
bar2/
x.txt
我想刪除資料夾bar1
和bar2
文件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 的命令時將使用哪些檔案/目錄。