创建文件测试

今天做了个测试,生成100万个文件:

脚本如下:

第一种脚本1个,makefile.sh

./file0.sh & ./file1.sh & ./file2.sh & ./file3.sh & ./file4.sh & ./file5.sh & ./file6.sh & ./file7.sh & ./file8.sh & ./file9.sh

第二种脚本10个,file*.sh

#!/bin/bash
for filename in $( seq 1 100000 )
do
touch ${filename}.txt
done

chmod 777 *.sh后,time ./makefile.sh

[root@server2 file]# time ./makefiles.sh
real    12m33.165s
user    0m55.967s
sys     1m7.424s

ls的查看需要这么长时间哦

[root@server2 file]# time ls
。。。。。。
real    1m29.619s
user    0m7.660s
sys     0m17.980s

基本上在百万级别,ls都成为很耗时的事情了。

ls完了之后就删除吧,结果

[root@server2 file]# time rm -rf *.txt
-bash: /bin/rm: Argument list too long

real    0m7.475s
user    0m4.928s
sys     0m2.543s

删不掉啊!!!强制也没用,一个一个来吧!!!

[root@server2 file]# time rm -rf 1*.txt

real    0m29.025s
user    0m2.653s
sys     0m5.925s

 2018年2月22日追加

最快的方法是使用rsync同步一个空目录

mkdir empty_dir
rsync -a --delete empty_dir/ yourdirectory/

sync删除的原理详见http://blog.liulantao.com/why-can-rsync-rapidly-delete-400000-files.html

 

在Linux下使用 "rm -rf *" 试图删除非常大量的小文件时,可能会报类似下边的错误:

 /bin/rm: Argument list too long.

     这是因为通配符"*"在执行时会被每个匹配的文件名来替换,例如“rm -rf file1 file2 file3 file4″。

系统只分配了一个比较小的缓冲区用来对这个列表进行排序,如果这个缓冲区满了,则shell不能执行这个命令。

    为了解决这个问题,很多人使用find命令来操作。即用find查找每一个文件,然后把文件名一个接一个的传递个rm命令,形式如下:

find . -type f -exec rm -v {} \;

这方法太慢。

http://www.stevekamerman.com/2008/03/deleting-tons-of-files-in-linux-argument-list-too-long/

给出了方法:

find . -type f -delete
find . -type d -print -delete

最好不要用-print参数看,没啥意思。直接df -i看呗!

转载于:https://www.cnblogs.com/tcicy/p/8353103.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值