Linux下刪除大量小文件
在Linux下使用 "rm -rf *" 試圖刪除非常大量的小文件時,可能會報類似下邊的錯誤:
/bin/rm: Argument list too long.
這是因為通配符"*"在執行時會被每個匹配的文件名來替換,例如“rm -rf file1 file2 file3 file4″。
系統只分配了一個比較小的緩沖區用來對這個列表進行排序,如果這個緩沖區滿了,則shell不能執行這個命令。
為了解決這個問題,很多人使用find命令來操作。即用find查找每一個文件,然後把文件名一個接一個的傳遞個rm命令,形式如下:
find . -type f -exec rm -v {} \;
但是這個方法對於數量巨大的文件時非常緩慢,比如我曾經刪除過一個目錄下的200W+個小文件。
辦法就是使用find命令內置的 "-delete" 參數 ,使用這種方法刪除文件,速度大概是 2000個文件/秒,速度比之前方法得到極大提高。當然也可以加上 "-print"參數來顯示每個刪除的文件。
find . -type f -delete
find . -type d -print -delete
但是我不建議加這個參數,如果你要觀察刪除文件的速度,我建議使用df -i 命令來查看indoe節點的變化情況。