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

目录
相关文章
|
27天前
|
Linux Shell 网络安全
在Linux中,rsync同步时,如何删除目标数据多出来的数据,即源上不存在,但目标却存在的文件或者目录?
在Linux中,rsync同步时,如何删除目标数据多出来的数据,即源上不存在,但目标却存在的文件或者目录?
|
27天前
|
Linux
在Linux中,rsync 同步数据时,如何过滤出所有.txt的文件不同步?
在Linux中,rsync 同步数据时,如何过滤出所有.txt的文件不同步?
|
29天前
|
Ubuntu 网络安全
【ubuntu】目录下文件太多导致rm指令无法执行问题解决方法
【ubuntu】目录下文件太多导致rm指令无法执行问题解决方法
28 0
|
4月前
|
Linux API 网络安全
centos7 图文详解精确同步企业实战 rsync include 同步指定文件exclude排除文件
centos7 图文详解精确同步企业实战 rsync include 同步指定文件exclude排除文件
53 0
|
网络安全
rm -rf 误删除数据如何进行恢复
rm -rf 误删除数据如何进行恢复
1105 0
|
运维 Shell Linux
Linux防止“rm -rf /”误删除
Linux防止“rm -rf /”误删除
rm -rf / 真的能删除所有东西吗?
rm -rf / 真的能删除所有东西吗?
rm -rf / 真的能删除所有东西吗?
|
Linux Shell 网络安全
Centos7 误执行chmod 777
Centos7 误执行chmod 777
|
监控 Shell
shell 评估文件/目录状态
shell 评估文件/目录状态
|
Linux
rm命令弱爆了!(一)
rm命令弱爆了!
170 0
rm命令弱爆了!(一)