美国云服务器的Liunx系统常用删除命令详解
云服务器
美国云服务器的Liunx系统常用删除命令详解
2026-01-21 09:50
美国云服务器的Liunx系统常用删除命令详解
文件删除的几种方式
在Linux系统中删除文件,最常用的命令就是rm命令。这个命令相信大家都已经很熟悉了,我们来简单回顾一些rm命令的例子。
$rm-ftestfile
-f选项在上面的命令中,表示将在不要求确认的情况下强行删除文件。
$rm-rftestdirectory
这个命令将删除名为testdirectory的目录以及该目录中的所有内容(使用的-r选项是递归删除文件)。
而删除目录,我们还有另一个命令,那就是rmdir,但是它只有在目录为空时才会删除该目录。
$rmdirtestdirectory
现在我们看看在Linux中删除文件的一些其它不同方法。
我最喜欢的方法之一是使用find命令,再进行删除操作。find命令是一个非常方便的工具,可用于根据文件的类型、大小、创建日期、修改日期和更多不同的条件来搜索文件。
我们来看一个find命令使用-exec来调用rm命令的例子。
$find/test-typef-execrm{}\;
上述命令将删除/test目录中的所有文件。首先find命令将查找目录中的所有文件,然后对于每个搜索结果,它会执行rm命令。
我们再看看可以与find命令一起使用的一些不同方法来删除文件。
$find/test-mtime+7-execrm{}\;
在上述示例中,find命令将搜索/test目录中7天前修改过的所有文件,然后删除每个文件。
$find/test-size+7M-execrm{}\;
上述示例中,将搜索目录/test目录中所有大于7M的文件,然后再删除它们。
在以上我们列出来的所有find命令示例中,都会为找到的每个文件调用rm命令。例如,在上面的最后一个find命令中,如果结果中有50个大于7M的文件,那么将调用50次rm命令删除文件。而这样的操作将需要花费更长的时间。
除了在find中借助-exec参数调用rm命令外,还有一个更好的选择,那就是使用-delete选项。比如:
$find/test-size+7M-delete
达到的效果与上一条命令一样。
删除巨量文件时用什么命令最快?
话不多说,我们直接上测试。
首先借助一个简单的bashfor循环创建50万个文件。
$foriin$(seq1500000);doechotesting>>$i.txt;done
上述命令中,将在当前工作目录中创建50万个txt文件,名称从1.txt到500000.txt,每个文件都包含testing的文本内容,因此文件大小至少在几千字节的范围。
在创建了50万个文件后,我们将尝试使用多方式来删除它们,看看哪种方式删除巨量文件速度最快。
Round1:rm命令
首先让我们使用简单的rm命令,同时我们使用time命令来计时。
$timerm-f*
-bash:/bin/rm:Argumentlisttoolong
real0m11.126s
user0m9.673s
sys0m1.278s
我们可以看到rm命令的执行结果是Argumentlisttoolong,这意味着该命令没有完成删除,因为给rm命令的文件数量太大而无法完成,所以它直接就躺平罢工了。
不要注意time命令显示的时间,因为rm命令没有完成它的操作,time命令只管显示你命令执行了多长时间,而不关心命令的最终结果。
Round2:使用-exec参数的find命令
现在让我们使用我们之前看到的带有-exec参数的find命令。
$timefind./-typef-execrm{}\;
real14m51.735s
user2m24.330s
sys9m48.743s
从我们使用time命令得到的输出可以看出,从单个目录中删除50万个文件需要14分51秒。这是相当长的时间,因为对于每个文件,都会执行一个单独的rm命令,直到删除所有文件。
Round3:使用-delete参数的find命令
现在让我们通过在find命令中使用-delete选项来测试消耗的时间。
$timefind./-typef-delete
real5m11.937s
user0m1.259s
sys0m28.441s
删除速度大大提高,只用了5分11秒!当你在Linux中删除数百万个文件时,这是速度的惊人改进。
Round4:Perl语言
现在让我们看看使用Perl语言删除文件是如何工作的,以及它与我们之前看到的其他删除方式相比的速度。
$timeperl-e'for(<*>){((stat)[9]<(unlink))}'
real1m0.488s
user0m7.023s
sys0m27.403s
从结果可以看出,Perl只用了大约1分钟就删除了该目录中的50万个文件,与我们之前看到的其他find命令和rm命令相比,这个速度非常之快!
但是,如果您有兴趣在使用Perl时用到更复杂的选项,则需要对Perl正则表达式有一定的了解。
Round5:rsync命令
还有一种较少使用且鲜为人知的方法可用于删除文件夹内的大量文件,这种方法正是我们著名的工具rsync,它的基本用法是用于在Linux中的两个本地和远程位置之间传输和同步文件。
现在我们来看看如何使用rsync命令的来删除文件夹内所有文件。其实很简单,我们可以通过将具有大量文件的目标目录与空目录进行同步来实现删除的操作。
在我们的例子中,/test目录(目标目录)有50万个文件,我们再创建一个名为blanktest的空目录(源目录)。现在,我们将在rsync命令中使用-delete选项,这将删除目标目录中的所有源目录中不存在文件。
$timersync-a--deleteblanktest/test/
real2m52.502s
user0m2.772s
sys0m32.649s
可以看到,仅用2分钟52秒就完成删除。
因此与find命令相比,如果您想清空包含数百万个文件的目录,使用rsync命令会更好。
购买使用一诺网络美国云服务器,可以极大降低初创企业、中小企业以及个人开发者等用户群体的整体IT使用成本,无需亲自搭建基础设施、简化了运维和管理的日常工作量,使用户能够更专注于自身的业务发展和创新。美国云服务器低至49元/月,购买链接:https://www.enuoidc.com/vpszq.html?typeid=3