Linux 下删除大量文件效率对比

文章
林里克斯

1.首先建立 50 万个文件

$ mkdir test
$ cd test
$ for i in $(seq 1 500000);do echo text >>$i.txt;done
$ du -sh test/
2.0G    test/

1.rm 删除

$ time rm -rf *
-bash: /usr/bin/rm: Argument list too long

real    0m4.281s
user    0m3.381s
sys 0m0.567s
由于文件数量过多,rm 跟不删除不了。

2.find 删除

$ time find ./ -type f -exec rm {} \;

real    30m15.627s
user    3m30.344s
sys 26m10.617s

3.find with delete

$ time find ./ -type f -delete

real    0m13.981s
user    0m0.481s
sys 0m12.926s
用时13s。

4.rsync 删除

$ mkdir rmtest
#首先建立空文件夹 `rmtest`
$ time rsync -a --delete rmtest/ test/

real    0m21.623s
user    0m1.048s
sys 0m18.524s

5.Python 删除

import os
import timeit
def main():
    for pathname,dirnames,filenames in os.walk('/home/username/test'):
        for filename in filenames:
            file=os.path.join(pathname,filename)
            os.remove(file)

if __name__=='__main__':
t=timeit.Timer('main()','from __main__ import main')
print t.timeit(1)  
1
2
$ python test.py
529.309022903
大概用时 9 分钟。
  1.  Perl删除
$ time perl -e 'for(<*>){((stat)[9]<(unlink))}'

real    0m22.093s
user    0m1.746s
sys 0m19.253s

7、结果:

rm:                #文件数量太多,不可用
find with -exec     #耗时大概 30 分钟
find with -delete   #13s
Perl                #22s
Python              #9分钟
rsync with -delete  #21s
#删除大量小文件可以尝试使用 rsync 和 find with -delete

Over~

版权协议须知!

本篇文章来源于 Uambiguous ,如本文章侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意

619 0 2020-10-24


分享:
icon_mrgreen.gificon_neutral.gificon_twisted.gificon_arrow.gificon_eek.gificon_smile.gificon_confused.gificon_cool.gificon_evil.gificon_biggrin.gificon_idea.gificon_redface.gificon_razz.gificon_rolleyes.gificon_wink.gificon_cry.gificon_surprised.gificon_lol.gificon_mad.gificon_sad.gificon_exclaim.gificon_question.gif
博主卡片
林里克斯 博主大人
一个致力于Linux的运维平台
运维时间
搭建这个平台,只为分享及记载自己所遇之事和难题。

现在时间 2024-04-28

今日天气
站点统计
  • 文章总数:240篇
  • 分类总数:29个
  • 评论总数:10条
  • 本站总访问量 216674 次

@奥奥

@Wong arrhenius 牛比

@MakerFace 厉害了!