大家好,我是良许。创建、删除和修改文件是用户在 Linux 系统中执行的非常常见操作。大家都知道,在 Linux 系统里使用 rm
命令删除单个文件时,几乎一瞬间就完成了。但是如果文件数量很大,那么删除操作就需要很长时间才能完成。你有没想过,删除 50 万个小文件,需要花费多少时间?我写这篇文章的目的,是为了找出在 Linux 中删除巨量文件的最快方法。通过测试发现,rm
命令简直弱爆了!我们将从一些简单的文件删除方法开始,然后比较不同方法完成文件删除任务的速度。看看哪种方式删除速度最快。
1. 文件删除的几种方式
在 Linux 系统中删除文件,最常用的命令就是 rm
命令。这个命令相信大家都已经很熟悉了,我们来简单回顾一些 rm
命令的例子。
$ rm -f testfile
-f
选项在上面的命令中,表示将在不要求确认的情况下强行删除文件。
$ rm -rf testdirectory
这个命令将删除名为 testdirectory
的目录以及该目录中的所有内容(使用的 -r
选项是递归删除文件)。而删除目录,我们还有另一个命令,那就是 rmdir
,但是它只有在目录为空时才会删除该目录。
$ rmdir testdirectory
现在我们看看在 Linux 中删除文件的一些其它不同方法。我最喜欢的方法之一是使用 find
命令,再进行删除操作。find
命令是一个非常方便的工具,可用于根据文件的类型、大小、创建日期、修改日期和更多不同的条件来搜索文件。我们来看一个 find
命令使用 -exec
来调用 rm
命令的例子。
$ find /test -type f -exec rm {} \;
上述命令将删除 /test
目录中的所有文件。首先 find
命令将查找目录中的所有文件,然后对于每个搜索结果,它会执行 rm
命令。我们再看看可以与 find
命令一起使用的一些不同方法来删除文件。
$ find /test -mtime +7 -exec rm {} \;
在上述示例中,find
命令将搜索 /test
目录中 7 天前修改过的所有文件,然后删除每个文件。
$ find /test -size +7M -exec rm {} \;
上述示例中,将搜索目录 /test
目录中所有大于 7M 的文件,然后再删除它们。在以上我们列出来的所有 find
命令示例中,都会为找到的每个文件调用 rm
命令。例如,在上面的最后一个 find
命令中,如果结果中有 50 个大于 7M 的文件,那么将调用 50 次 rm
命令删除文件。而这样的操作将需要花费更长的时间。除了在 find
中借助 -exec
参数调用 rm
命令外,还有一个更好的选择,那就是使用 -delete
选项。比如:
$ find /test -size +7M -delete
达到的效果与上一条命令一样。