- A+
所属分类:运维每日一题
这道题考察的是当一个命令接上很多参数(几十万以上)会报一个错误:Argument list too long
因此你没有办法touch这么多文件,也没有办法一次性删除这么多文件。
1 2 | [root@oldboydata]# touch test{1..500000} -bash:/bin/touch: Argument list too long |
那该如何解决呢?
创建测试文件
1 2 | mkdir/data && cd /data for i in {1..50};do eval touch test{$((i-1))0000..${i}0000};done |
#尝试使用rm删除
1 2 | [root@oldboydata]# rm -f * -bash:/bin/rm: Argument list too long |
解决方法:
1 2 3 4 | 1) ls|xargs rm -f 2) find . -type f|xargs rm -f 3) mkdir /null rsync-av --delete /null/ /tmp/ (/tmp目录下有大量文件,新建空的null文件夹,rsync同步时将tmp文件夹清空) |
删除文件消耗时间测试:
1 2 3 4 5 6 7 | [root@oldboy/]# cd data [root@oldboydata]# time ls |xargs rm real 0m7.651s user 0m2.273s sys 0m4.446s ls 内置,sys处理时间较短,用户时间较长 |
#再次创建测试文件
1 2 3 4 5 6 | [root@oldboy/]# cd data/ [root@oldboydata]# time find . -type f|xargs rm -f real 0m7.482s user 0m0.426s sys 0m5.096s |
#再次创建测试文件
1 2 3 4 5 6 7 | [root@oldboy~]# mkdir /null [root@oldboy~]# time rsync -a --delete /null/ /data/ real 0m10.572s user 0m0.724s sys 0m7.893s 速度较慢,或许对于文件较大时有奇效 |
今天是老男孩教育每日一题陪伴大家的第30天。
对于题目和答案的任何疑问,请在博客评论区留言。
往期题目索引
https://www.drscrewdriver.com/100.html

我的微信公众号
我的微信公众号扫一扫