Skip to Content

如何安全的刪除所在目錄下的目錄與檔案?

在正常使用的目錄中,相信檔案大都是會包含有 . (dot) 這個符號,可是在系統所控管的目錄下,沒有包含的檔案可就是一海票了,特別是 /var/spool/clientmqueue/ 目錄,這是當本地信件信件無法寄送時,皆會被安排到這兒等候傳送,不幸的是,問題就出現在此了 烏鴉

因為不管經過多久,在這目錄下的所有等候傳送信件暫存檔,皆不會被系統刪除,可是每個磁碟分割區都有一定的容量及一定的檔案數量,不管是檔案容量或是檔案數量達到系統設定的最高值後,那麼即使該分割區還有巨大的儲存空間,也不用去妾想還能夠存進任何檔案,是的,即使那個檔案容量為 0 Byte,因為檔案數量也達頂了,所以不給存 暈

因此這就牽扯到本文的主題了,因為咱們的自行手動刪除 /var/spool/clientmqueue/ 目錄下的那些以亂數值為名的檔案,可是在此又有個問題了,因為通常都是在發生檔案儲存容量或檔案儲存數量不足時,我們才會想到要來進行刪除該目錄下的檔案,此時檔案數皆是以千或萬為計量的,而 rm 這個指令在遇到這種情況下是粉容易出槌的,不信?那麼試試底下這個指令看看︰
rm -rf *
嘿嘿,有勇氣實驗的你,相信會發現,怎麼在刪完 /var/spool/clientmqueue/ 目錄下的檔案後,又繼續刪除 /var/spool/ 目錄下的所有子目錄下的檔案,更慘的是刪完之後,又繼續刪除 /var/ 目錄下所有子目錄下的檔案,還有更慘的,聰明的你,猜一下吧 鞭打

其實原因出在 * 這個萬用字符,而每個目錄中又有代表所在目錄的 . (dot) 符號,以及代表父目錄的 .. 符號,那 rm -rf * 指令下達之後,在刪除 .. 這個檔案時,就等同告訴指令繼續刪除所在目錄的上一層目錄下的所有檔案、子目錄及子目錄下的所有檔案,總之就是將系統給砍個亂七八糟之後準備重裝的惡魔指令 爽

所以要安全的刪除所在目錄下的子目錄與檔案,同時又要保留該目錄,而不用怕會刪到父目錄下的檔案,可以採用底下指令︰
ls | xargs rm -rf
xargs 的功能:將管線左側指令執行結果輸出給 xargs 後面的指令,作為該指令的參數。


個性簽名

沒有最好,只有更好!!