X

Linux 快速清除「檔案數量太多」的速度比較

目錄裡面的檔案太多,要砍掉會遇到下述問題:

  • rm -f *
    -bash: /bin/rm: Argument list too long

這個問題此篇已經有解法:檔案數太多砍不掉該怎麼辦

不過還是要砍很久,要怎麼辦呢?(通常遇到這種時,都要砍個半天以上)

Linux 快速清除「檔案數量太多」的速度比較

此篇文章有把砍大量檔案的方法與花費時間做個測試紀錄,可以參考看看。

先看結論,最快的是這種方法:perl -e 'for(<*>){((stat)[9]<(unlink))}'

下述摘錄自此篇:Which is the fastest method to delete files in Linux

  • RM Command Is not capable of deleting large number of files
    $ time rm -f *
    -bash: /bin/rm: Argument list too long
    real 0m11.126s
    user 0m9.673s
    sys 0m1.278s
  • Find Command with -exec 14 Minutes for half a million files
    $ time find ./ -type f -exec rm {} \;
    real 14m51.735s
    user 2m24.330s
    sys 9m48.743s
  • Find Command with -delete 5 Minutes for half a million files
    $ time find ./ -type f -delete
    real 5m11.937s
    user 0m1.259s
    sys 0m28.441s
  • Perl 1 Minute for half a million files
    $ time perl -e 'for(<*>){((stat)[9]<(unlink))}'
    real 1m0.488s
    user 0m7.023s
    sys 0m27.403s
  • RSYNC with -delete 2 Minute 56 seconds for half a million files
    $ time rsync -a --delete blanktest/ test/
    real 2m52.502s
    user 0m2.772s
    sys 0m32.649s
  • Hank 大大補充:find ./ -type f | xargs rm -f 速度比 "find ./ -type f -exec rm {} \;" 快10倍,跟 perl 那招的速度差不多(比較慢一點),不過可以加上 cmin .. 等等,彈性比較大
  • cktsai 補充:xargs -P8 可以用8個處理器來一起平行做事情(看你的機器多大;有的也許20個核心)。 一般來說 可以用 xargs -I {} -P8 rm -f {} 來確保 {} 是放對了檔案的argument位子。
    • find . -type f -print0 | xargs -0 -I {} rm -f {}
Tsung: 對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
Related Post