老男孩教育每日一题-2017-04-18:命令风暴:如何快速删除Linux中海量小文件?

这道题考察的是当一个命令接上很多参数(几十万以上)会报一个错误:Argument list too long

因此你没有办法touch这么多文件,也没有办法一次性删除这么多文件。

[root@oldboydata]# touch test{1..500000}
-bash:/bin/touch: Argument list too long


那该如何解决呢?

 

创建测试文件

mkdir/data && cd /data
for i in {1..50};do eval touch test{$((i-1))0000..${i}0000};done


#尝试使用rm删除

[root@oldboydata]# rm -f *
-bash:/bin/rm: Argument list too long

 

解决方法:

1)  ls|xargs rm -f
2)  find . -type f|xargs rm -f
3)  mkdir /null
rsync-av --delete /null/ /tmp/

 

删除文件消耗时间测试:

[

root@oldboy/]# cd data
[root@oldboydata]# time ls |xargs rm
 
real    0m7.651s
user    0m2.273s
sys    0m4.446s


#再次创建测试文件

[root@oldboy/]# cd data/
[root@oldboydata]# time find . -type f|xargs rm -f
 
real    0m7.482s
user    0m0.426s
sys     0m5.096s

 

#再次创建测试文件

[root@oldboy~]# mkdir /null
[root@oldboy~]# time rsync -a --delete /null/ /data/
 
real    0m10.572s
user    0m0.724s
sys    0m7.893s


今天是老男孩教育每日一题陪伴大家的第30天。

对于题目和答案的任何疑问,请在博客评论区留言。


往期题目索引

http://lidao.blog.51cto.com/3388056/1914205