Shell

如何刪除目前目錄中以點開頭的所有文件?

  • July 13, 2018

我使用 Ubuntu 14.04 並在終端中使用 sudo su 成為 root 並且我想手動刪除 root 的垃圾。除了一些以點開頭的文件外,它刪除了所有內容。像 .htaccess 等。所以我去了那個目錄(這是“文件”),我執行了這個命令:

rm -rf .*

它確實刪除了這些文件,但我也收到一條錯誤消息,系統無法刪除“。” 和“..”是什麼意思?就像我試圖刪除整個目錄樹一樣?就像我說的,當我執行該命令時,我在最低目錄中。準確地說是這個:/root/.local/share/Trash/files/ 我擊落了我的電腦,然後打開了它。乍一看,一切似乎都很正常。所以現在我想問是哪裡出了問題,我所做的是否真的會對整個系統造成嚴重損害?換句話說,我現在應該擔心還是一切都好?

.*匹配名稱以 . 開頭的所有文件.。每個目錄都包含一個.指向目錄本身的文件,以及..指向父目錄的文件。.*包括那些文件。

對你來說幸運的是,嘗試刪除...失敗,所以你得到一個無害的錯誤。

在 zsh 中,.*不匹配.or ..。在 bash 中,您可以設置

GLOBIGNORE='.:..:*/.:*/..'

然後*將匹配所有文件,包括點文件,但不包括.and ..

或者,您可以使用明確排除.and的萬用字元模式..

rm -rf .[!.]* ..?*

或者

rm -rf .[!.] .??*

或者,使用find.

find . -mindepth 1 -delete

當你想刪除所有的點文件時,約定是使用這個命令:

rm .??*

這將刪除以包含至少兩個其他字元的點開頭的所有文件,從而保持.原樣..。當然,它也會遺漏點後只有一個字母的文件名,但這種情況應該很少見。

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