rm命令弱爆了!(二)

简介: rm命令弱爆了!

2. 删除巨量文件时用什么命令最快?

话不多说,我们直接上测试。首先借助一个简单的 bash for 循环创建 50 万个文件。

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

上述命令中,将在当前工作目录中创建 50 万个 txt 文件,名称从 1.txt 到 500000.txt,每个文件都包含 testing 的文本内容,因此文件大小至少在几千字节的范围。在创建了 50 万个文件后,我们将尝试使用多方式来删除它们,看看哪种方式删除巨量文件速度最快。微信图片_20220419170718.jpg

Round 1:rm 命令

首先让我们使用简单的 rm 命令,同时我们使用 time 命令来计时。

$ time rm -f *
-bash: /bin/rm: Argument list too long
real    0m11.126s
user    0m9.673s
sys     0m1.278s

我们可以看到 rm 命令的执行结果是 Argument list too long ,这意味着该命令没有完成删除,因为给  rm 命令的文件数量太大而无法完成,所以它直接就躺平罢工了。不要注意 time 命令显示的时间,因为 rm 命令没有完成它的操作,time 命令只管显示你命令执行了多长时间,而不关心命令的最终结果。

Round 2:使用 -exec 参数的 find 命令

现在让我们使用我们之前看到的带有 -exec 参数的 find 命令。

$ time find ./ -type f -exec rm {} \;
real    14m51.735s
user    2m24.330s
sys     9m48.743s

从我们使用 time 命令得到的输出可以看出,从单个目录中删除 50 万个文件需要 14 分 51 秒。这是相当长的时间,因为对于每个文件,都会执行一个单独的 rm 命令,直到删除所有文件。

Round 3:使用 -delete 参数的 find 命令

现在让我们通过在 find 命令中使用 -delete 选项来测试消耗的时间。

$ time find ./ -type f -delete
real    5m11.937s
user    0m1.259s
sys     0m28.441s

删除速度大大提高,只用了 5 分 11 秒!当你在 Linux 中删除数百万个文件时,这是速度的惊人改进。

Round 4:Perl 语言

现在让我们看看使用 Perl 语言删除文件是如何工作的,以及它与我们之前看到的其他删除方式相比的速度。

$ time perl -e 'for(<*>){((stat)[9]<(unlink))}'
real    1m0.488s
user    0m7.023s
sys     0m27.403s

从结果可以看出,Perl 只用了大约 1 分钟就删除了该目录中的 50 万个文件,与我们之前看到的其他 find 命令和 rm 命令相比,这个速度非常之快!但是,如果您有兴趣在使用 Perl 时用到更复杂的选项,则需要对 Perl 正则表达式有一定的了解。微信图片_20220419170722.jpg

Round 5:rsync 命令

还有一种较少使用且鲜为人知的方法可用于删除文件夹内的大量文件,这种方法正是我们著名的工具 rsync ,它的基本用法是用于在 Linux 中的两个本地和远程位置之间传输和同步文件。现在我们来看看如何使用 rsync 命令的来删除文件夹内所有文件。其实很简单,我们可以通过将具有大量文件的目标目录与空目录进行同步来实现删除的操作。在我们的例子中, /test 目录(目标目录)有 50 万个文件,我们再创建一个名为 blanktest 的空目录(源目录)。现在,我们将在 rsync 命令中使用 -delete 选项,这将删除目标目录中的所有源目录中不存在文件。

$ time rsync -a --delete blanktest/ test/
real    2m52.502s
user    0m2.772s
sys     0m32.649s

可以看到,仅用 2 分钟 52 秒就完成删除。因此与 find 命令相比,如果您想清空包含数百万个文件的目录,使用 rsync 命令会更好。

3. 小结

下表总结了 Linux 中采用不同方式删除 50 万个文件的速度,方便大家参考。

命令 花费时间
rm 命令 无法删除大量文件
使用 -exec 参数的 find 命令 14 分 51 秒
使用 -delete 参数的 find 命令 5 分 11 秒
Perl 1 分钟
rsync 命令 2 分 52 秒

微信图片_20220419170725.jpg

目录
相关文章
|
存储 算法 数据库
一起聊聊图像质量和美学评估的数据集
图像质量和美学评估是计算机视觉领域中热点的研究问题,并且极具应用前景,可与众多实际应用深度结合。评价一张图片,主要从两个方向,一个是图像的质量,如像素、清晰度、有无噪声等,一个是图像的感觉,也就是美学,如构图、颜色、内容主体等。通过这两个方面就可以评价一张图片的好坏,通过计算机视觉算法,可以为图片自动评分,得分高的图片被认为较好,可以用于推荐和搜索等应用场景。本文主要聊聊一些关于图像质量和美学评估
13081 1
|
8月前
|
XML Java 应用服务中间件
SpringBoot项目打war包流程
本文介绍了将Spring Boot项目改造为WAR包并部署到外部Tomcat服务器的步骤。主要内容包括:1) 修改pom.xml中的打包方式为WAR;2) 排除Spring Boot内置的Tomcat依赖;3) 添加Servlet API依赖;4) 改造启动类以支持WAR部署;5) 打包和部署。通过这些步骤,可以轻松地将Spring Boot应用转换为适合外部Tomcat服务器的WAR包。
461 64
SpringBoot项目打war包流程
|
6月前
|
存储 虚拟化 iOS开发
VMware ESXi 7.0U3s macOS Unlocker & OEM BIOS 2.7 标准版和厂商定制版
VMware ESXi 7.0U3s macOS Unlocker & OEM BIOS 2.7 标准版和厂商定制版
66 1
VMware ESXi 7.0U3s macOS Unlocker & OEM BIOS 2.7 标准版和厂商定制版
IDEA Error:java: Compilation failed: internal java compiler error 解决办法
IDEA Error:java: Compilation failed: internal java compiler error 解决办法
684 0
|
Java Maven
maven常用仓库
maven常用仓库
338 2
|
弹性计算 关系型数据库 MySQL
检测 MySQL 数据库连接数量
【4月更文挑战第28天】
87 0
|
Ubuntu NoSQL Linux
查看linux操作系统版本:Ubuntu?Centos?还是其他?
查看linux操作系统版本:Ubuntu?Centos?还是其他?
25948 2
查看linux操作系统版本:Ubuntu?Centos?还是其他?
|
弹性计算 运维 负载均衡
《企业运维之弹性计算原理与实践》——第六章 OOS 与总结——第六章(下):运维编排 OOS 案例(4)
《企业运维之弹性计算原理与实践》——第六章 OOS 与总结——第六章(下):运维编排 OOS 案例(4)
203 0
|
存储 Cloud Native 数据挖掘
重磅发布|云原生数据仓库AnalyticDB技术架构升级,大幅降低存储成本
云原生数据仓库AnalyticDB技术架构重磅升级,实现秒级扩缩容、大幅降低存储成本。
380 0
重磅发布|云原生数据仓库AnalyticDB技术架构升级,大幅降低存储成本