
Linux 刪除資料夾與檔案的指令有哪些?
在 Linux 刪除資料夾用 rm -r(空資料夾也可以用 rmdir),刪除檔案用 rm。下面先列出最常用的指令,再依情況說明用法與注意事項。
| 要做的事 | 指令 |
|---|---|
| 刪除一個檔案 | rm 檔名 |
| 刪除空的資料夾 | rmdir 資料夾 |
| 刪除資料夾(含裡面所有檔案與子資料夾) | rm -r 資料夾 |
| 強制刪除資料夾,不逐一詢問 | rm -rf 資料夾 |
| 清空資料夾,但保留資料夾本身 | find 資料夾 -mindepth 1 -delete |
| 只刪除資料夾裡的檔案,保留子資料夾 | find 資料夾 -type f -delete |
一、刪除資料夾:rm -r、rm -rf 與 rmdir
刪除空的資料夾:rmdir
rmdir mydir
rmdir 只能刪除空的資料夾。資料夾裡還有東西時會出現「Directory not empty」並停止,不會刪掉任何檔案,所以它是最安全的刪除方式。
刪除資料夾與裡面的所有內容:rm -r
rm -r mydir
-r 是「遞迴」(recursive)的意思:不管裡面有多少層子資料夾,會連同所有檔案一起刪除。遇到唯讀的檔案時,系統會一個一個詢問是否刪除。
強制刪除,不詢問:rm -rf
rm -rf /var/log/httpd/access
-f 是「強制」(force):不詢問、不提示,檔案不存在也不會報錯。上面這行會刪除 /var/log/httpd/access 資料夾,以及它底下所有的檔案與子資料夾。
rm -rf 是最常用、也最危險的刪除指令,執行前請先看第五節的注意事項。
刪除前逐一確認:rm -ri
rm -ri mydir
加上 -i 之後,每刪除一個檔案或資料夾都會先詢問,適合不確定裡面有什麼的時候。
二、刪除檔案:rm 的基本用法
rm file.txt # 刪除一個檔案
rm file1.txt file2.txt # 一次刪除多個檔案
rm *.log # 刪除目前資料夾裡所有 .log 檔
rm -f access.log # 強制刪除,不詢問
rm -i file.txt # 刪除前先詢問
刪除其他資料夾裡的檔案,在檔名前面加上路徑即可,例如 rm -f /var/log/httpd/access.log。
三、清空資料夾,但保留資料夾本身
常見的需求是「把資料夾裡的東西都刪掉,但資料夾留著」,例如清空快取或暫存資料夾。依照要刪除的範圍,有三種做法:
| 指令 | 刪除的範圍 |
|---|---|
rm -rf mydir/* | 檔案與子資料夾,但不包含隱藏檔(以 . 開頭的檔案,例如 .htaccess) |
find mydir -mindepth 1 -delete | 裡面的所有東西,包含隱藏檔,只保留 mydir 本身 |
find mydir -type f -delete | 只刪除檔案,子資料夾的結構保留 |
只想刪除目前所在資料夾的檔案,把 mydir 換成 . 即可,例如 find . -type f -delete。
四、檔案太多,出現「Argument list too long」
資料夾裡有幾萬個檔案時,執行 rm * 可能會出現「Argument list too long」,因為 * 展開後的檔名超過系統的長度限制。這時改用 find:
find mydir -type f -delete
或是搭配 xargs 分批刪除。檔名裡有空白時,要加上 -print0 與 -0,才不會被拆成兩個檔名:
find mydir -type f -print0 | xargs -0 rm -f
只想刪除特定檔案時,可以加上條件,例如刪除 30 天以前的 .log 檔:
find /var/log/myapp -type f -name "*.log" -mtime +30 -delete
五、刪除之前,先確認這幾件事
Linux 的指令列沒有資源回收筒,rm 刪掉的檔案無法從系統裡救回來。執行前建議養成這幾個習慣:
- 先列出、再刪除:用
find時,先把-delete拿掉執行一次,確認列出來的就是要刪的檔案,再把-delete加回去。用rm時,可以先用ls看一次同樣的路徑。 - 確認目前所在的位置:執行
rm -rf *之前,先用pwd確認自己在哪個資料夾。在錯的資料夾執行,就會刪錯東西。 - 寫在程式裡的路徑要防呆:腳本裡寫
rm -rf "$DIR"/*,如果$DIR剛好是空的,就會變成rm -rf /*。可以改寫成rm -rf "${DIR:?}"/*,變數為空時指令會直接停止。 - 小心 sudo:加上
sudo之後,系統檔案也刪得掉。多數發行版的rm預設會擋下rm -rf /,但rm -rf /*這類寫法擋不住。 - 重要資料先備份:正式主機上的網站檔案或資料庫,刪除前先備份,誤刪時才有辦法還原。