Linux下刪除大量小文件

轉自:http://blog.sina.com.cn/s/blog_704836f40100rr1c.html 

在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 {} \;

 

    我也使用過這種方法,詳見本人博文 <<直接使用inode號來刪除文件>>

 

    但是這個方法對於數量巨大的文件時非常緩慢,比如我曾經刪除過一個目錄下的200W+個小文件。經過google找到了這份blog文章: Deleting tons of files in Linux (Argument list too long),參考文中的方法解決了我的問題。

 

    辦法就是使用find命令內置的 "-delete" 參數 ,使用這種方法刪除文件,速度大概是 2000個文件/秒,速度比之前方法得到極大提高。當然也可以加上 "-print"參數來顯示每個刪除的文件。

 

find . -type f -delete

find . -type d -print -delete  

   但是我不建議加這個參數,如果你要觀察刪除文件的速度,我建議使用df -i 命令來查看indoe節點的變化情況。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章