老男孩教育每日一题-2017-04-18:命令风暴:如何快速删除Linux中海量小文件?
这道题考察的是当一个命令接上很多参数(几十万以上)会报一个错误: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/
|
删除文件消耗时间测试:
[
1
2
3
4
5
6
|
root@oldboy/]
# cd data
[root@oldboydata]
# time ls |xargs rm
real 0m7.651s
user 0m2.273s
sys 0m4.446s
|
#再次创建测试文件
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
|
[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
本文转自 李导 51CTO博客,原文链接:http://blog.51cto.com/lidao/1916945