Linux 下删除大量文件效率对比

今天我们来测试一下Linux下面删除大量文件的效率。

首先建立50万个文件

$ test   for i in $(seq 1 500000);do echo text >>$i.txt;done

测试目录:/home/test

模拟写入3000万个空文件:

echo test{01..30000000} | xargs touch

在这里插入图片描述
结果把inode都给占满了:

查看创建的空文件 :

#time find . -type f -empty |wc -l 

在这里插入图片描述

rm删除

$ time rm -f *
zsh: sure you want to delete all the files in /home/hungerr/test [yn]? y
zsh: argument list too long: rm
rm -f *  3.63s user 0.29s system 98% cpu 3.985 total
由于文件数量过多,rm不起作用。

或者
#rm -rf *.*
#s | xargs rm -rf 

在这里插入图片描述
在这里插入图片描述
提示内存已被耗尽。

正确的删除方式:

1.直接删除父目录(速度:很慢)

[root@localhost home]# rm -rf test/

在这里插入图片描述
耗时39分钟

2.使用find命令配合 -delete 选项(速度:最慢!)
在这里插入图片描述
由于是空文件,这里使用-empty选项,实际应用场景应该使用-size 选项来指定文件大小进行删除

最快最推荐的方法(速度:极快):

创建一个空文件夹,使用rsync -a --delete选项,将空文件夹内容与目标文件夹进行同步
在这里插入图片描述

find删除

$ time find ./ -type f -exec rm {} \;
find ./ -type f -exec rm {} \;  49.86s user 1032.13s system 41% cpu 43:19.17 total
大概43分钟,我的电脑。。。。。。边看视频边删的。
find with delete

$ time find ./ -type f -delete
find ./ -type f -delete  0.43s user 11.21s system 2% cpu 9:13.38 total
用时9分钟。

rsync删除

# 首先建立空文件夹blanktest
$ time rsync -a --delete blanktest/ test/
rsync -a --delete blanktest/ test/  0.59s user 7.86s system 51% cpu 16.418 total
16s,很好很强大。

Python删除

import os
import timeit
def main():
    for pathname,dirnames,filenames in os.walk('/home/username/test'):
        for filename in filenames:
            file=os.path.join(pathname,filename)
            os.remove(file)

if __name__=='__main__':
t=timeit.Timer('main()','from __main__ import main')
print t.timeit(1)  
1
2
$ python test.py
529.309022903

大概用时9分钟。
Perl删除

$ time perl -e 'for(<*>){((stat)[9]<(unlink))}'
perl -e 'for(<*>){((stat)[9]<(unlink))}'  1.28s user 7.23s system 50% cpu 16.784 total
16s,这个应该最快了。

结果:

rm:文件数量太多,不可用
find with -exec 50万文件耗时43分钟
find with -delete 9分钟
Perl  16s
Python 9分钟
rsync with -delete  16s

结论:删除大量小文件rsync最快,最方便。

rsync是最快的方法,当然如果会使用Perl的话,还可以更快,但是并不是所有人都会,所以介绍一个最容易上手的方法。

不想介绍rm 和 find 这两种方法(即慢又不实用),但是为了严谨的告诉大家rsync比较好,所以就都贴上测试图片啦。

Linux 删除目录下文件的 10 种方法

删除当前目录下的文件

1.rm -f *
#最经典的方法,删除当前目录下的所有类型的文件
在这里插入图片描述
2.find . -type f -delete或find . -type f -exec rm -f {} ;
#用find命令查找普通文件并删除or用find命令的处理动作将其删除
在这里插入图片描述
3.find . -type f | xargs rm -f
#用于参数列表过长;要删除的文件太多
在这里插入图片描述
4.rm -f find . -type f
#删除全部普通文件
在这里插入图片描述
5.for delete in ls -l;do rm -f * ;done
#用for循环语句删除当前目录下的所有类型的文件
在这里插入图片描述

删除指定目录下的文件

1.rm -f 指定目录*
#最经典的方法,删除指定目录下的所有类型的文件

2.find 指定目录 -type f -delete或find 指定目录 -type f -exec rm -f {} ;
#用find命令查找指定目录下的所有普通文件并删除or用find命令的处理动作将其删除

3.find 指定目录 -type f | xargs rm -f
#用于参数列表过长;要删除的文件太多

4.rm-f find 指定目录 -type f
#删除指定目录下的全部普通文件

5.for delete in ls –l 指定目录路径;do rm -f * ;done
#用for循环语句删除指定目录下的所有类型的文件

参考链接 :
Linux 删除目录下文件的 10 种方法 :https://mp.weixin.qq.com/s/GuEUrnBJzvcOSq5A2VuXvg
作者:ZYJTF_Zhang
链接:https://blog.51cto.com/zhangdaifu/1933091

Linux 下删除大量文件效率对比,看谁删的快! :https://mp.weixin.qq.com/s/SMTZrBi20ijeWFhg0udONA

http://www.safebase.cn/article-260775-1.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寰宇001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值