热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

今天我们来测试一下Linux下面删除大量文件的效率。首先建立50万个文件$testforiin$(seq1500000);doechotext$i.txt;done测试目录

今天我们来测试一下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 &#39;for(<*>){((stat)[9]<(unlink))}&#39;
perl -e &#39;for(<*>)
{((stat)[9]<(unlink))}&#39; 1.28s user 7.23s system 50% cpu 16.784 total
16s&#xff0c;这个应该最快了。

结果&#xff1a;

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

结论&#xff1a;删除大量小文件rsync最快&#xff0c;最方便。

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

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


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

删除当前目录下的文件

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


删除指定目录下的文件

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

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

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

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

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

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

Linux 下删除大量文件效率对比&#xff0c;看谁删的快&#xff01; &#xff1a;https://mp.weixin.qq.com/s/SMTZrBi20ijeWFhg0udONA

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


推荐阅读
author-avatar
手机用户2502922313
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有