首页 最新文章网站服务器运维正文

Linux下删除大量文件的几种方法的效率对比

liunx系统下对于大量文件的删除有很多中方法,如rm、find、rSYNc、Python删除等。下面通过测试案例对比出集中删除方法的效率。

为了测试效果,这里首先创建50万个文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost ~]# mkdir test
[root@localhost ~]# cd test
[root@localhost test]# for file in $(seq 1 500000).log;do echo "this is test" >> ${file}.log;done
[root@localhost test]# ls
17480.log       24981.log  32481.log  39983.log  47483.log  54984.log  62484.log  69986.log  77486.log  84987.log  92487.log  99989.log
17481.log       24982.log  32482.log  39984.log  47484.log  54985.log  62485.log  69987.log  77487.log  84988.log  92488.log  9998.log
17482.log       24983.log  32483.log  39985.log  47485.log  54986.log  62486.log  69988.log  77488.log  84989.log  92489.log  99990.log
17483.log       24984.log  32484.log  39986.log  47486.log  54987.log  62487.log  69989.log  77489.log  8498.log   9248.log   99991.log
.........
.........
 
[root@localhost test]# du -sh /root/test
395M    /root/test

1.  rm方法删除  [由于文件数量过多,rm删除不起作用!原因是文件夹下的文件数目过多,命令行过长所致]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[root@localhost ~]# rm -f /root/test/*.log
-bash/usr/bin/rm: Argument list too long     
  
尝试切换到删除的目标目录下进行删除,rm命令中不要跟绝对路径,直接在当前目录下删除!
[root@localhost ~]# cd /root/test/
[root@localhost test]# time rm -f *.log
-bash/usr/bin/rm: Argument list too long
.......
  
如果还是出现"-bash: /usr/bin/rm: Argument list too long"报错,还可以尝试结合xargs命令来删除!
[root@localhost ~]# cd /root/test/
[root@localhost test]# ls *.log|xargs -n10 rm -f
-bash/usr/bin/rm: Argument list too long
 
[root@localhost test]# ls * |xargs -n 10 rm -f      #当文件量过多时,最好是切换到目标目录下,直接删除*,不跟跟全路径!
-bash/usr/bin/ls: Argument list too long
 
上面命令的解释:
输出所有的文件名(用空格分割xargs就是将ls的输出,每10个为一组(以空格为分隔符。"-n 10" 和 "-n10"是一个意思),
作为rm -rf的参数也就是说将所有文件名10个为一组,由rm -rf删除,这样就不会超过命令行的长度了。
 
  
使用for循环进行rm删除也不行!
[root@localhost test]# for i in `ls /root/test/*.log`;do rm -f $i;done
-bash/usr/bin/ls: Argument list too long
[root@localhost test]# for i in `ls /root/test/*`;do rm -f $i;done  
-bash/usr/bin/ls: Argument list too long
[root@localhost test]# for i in `ls *`;do rm -f $i;done         
-bash/usr/bin/ls: Argument list too long

2.  find + rm 命令删除 [耗时40多分钟!]

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost test]# time find /root/test -type f -name *.log -exec rm -f {} \;
-bash/usr/bin/find: Argument list too long
 
real    0m1.303s
user    0m1.159s
sys     0m0.143s
 
当文件量过多时,不跟要全路径删除,直接切换到目标目录下删除!
[root@localhost test]# cd /root/test/
[root@localhost test]# time find ./ -type f -exec rm -f {} \;
 
这样就可以删除了,但是find命令很耗时,用了40多分钟!!!

3.  find + delete 命令删除 [耗时9分钟]

1
[root@localhost test]# time find ./ -type f -delete

4.  rsync删除 [耗时18秒,很强大]

1
2
3
4
5
首先建立空文件夹empty
[root@localhost ~]# mkdir /root/empty
 
然后使用rsync替换原理进行空覆盖!快速删除功能很强大!!
[root@localhost ~]# time rsync -avpgolr --delete /root/empty/ /root/test/

结论:对于海量小文件的删除,find方法最慢,rsync方法最快最方便!!!

左手Excel右手VBA此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“左手Excel右手VBA”或者“URItker”或者微信扫描右侧二维码都可以关注本站微信公众号。

左手Excel右手VBA此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“左手Excel右手VBA”或者“URItker”或者微信扫描右侧二维码都可以关注本站微信公众号。


#转载请注明出处!

评论

精彩评论
觉得有用就打赏吧
关注本站公众号,享受更多服务!
联系方式
QQ:########
地址:中国·辽宁
Email:2727987445#qq.com
Copyright ©2015-2021.Powered by 云水客 | 网站地图 | 辽ICP备14000512号-5