Shell
如何刪除目前目錄中以點開頭的所有文件?
我使用 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 .??*
這將刪除以包含至少兩個其他字元的點開頭的所有文件,從而保持
.
原樣..
。當然,它也會遺漏點後只有一個字母的文件名,但這種情況應該很少見。