Linux中删除文件的命令及其示例用法
代码语言:javascript复制在 Linux 中删除文件,最常用的命令是 rm 命令。让我们看一些 rm 命令的例子。
[root@rumenz ~]# rm -f testfile
代码语言:javascript复制
-f
在上面的命令中使用,将在不要求确认的情况下强行删除文件。
[root@rumenz ~]# rm -rf testdirectory
代码语言:javascript复制上述命令将删除名为
testdirectory
的目录 以及该目录中的所有内容(使用的-r选项是递归删除文件)
[root@rumenz ~]# rmdir testdirectory
代码语言:javascript复制上面的命令 rmdir,只有在目录为空时才会删除该目录。
现在让我们看看在 Linux 中删除文件的一些不同方法。我最常用方法之一是使用find命令。可用于根据文件的类型、大小、创建日期、修改日期和更多不同的条件来搜索文件。
[root@rumenz /]# find /test -type f -exec rm {} ;
代码语言:javascript复制上面显示的命令将删除 /test 目录中的所有文件。首先 find 命令将查找目录中的所有文件,然后对于每个结果,它会执行和 rm。
让我们看看可以与 find 命令一起使用的一些不同方法来删除文件。
[root@rumenz /]# find /test -mtime 7 -exec rm {} ;
代码语言:javascript复制在上面显示的示例中,find 命令将搜索 /test 目录中 7 天前修改过的所有文件,然后删除每个文件。
[root@rumenz /]# find /test -size 7M -exec rm {} ;
上图示例,将搜索目录/test 中所有大于7M 的文件,然后删除每个文件。
在上面显示的所有 find 命令示例中,都会为列表中的每个文件调用 rm 命令。例如,在上图的最后一个find命令中,如果结果是60个大于7M的文件,则调用60个rm命令删除每个文件。这将需要更长的时间。
除了在 find 中借助 -exec 参数使用 rm 的上述命令外,还有一个更好的选择。我们将看到替代方案,然后计算每个方案的速度差异。
批量生成60万个文件
代码语言:javascript复制[root@rumenz test]# for i in $(seq 1 600000); do echo testing >> $i.txt; done
代码语言:javascript复制上述命令将 在当前工作目录中 创建 60 万个文件(半百万),名称从 1.txt 到 600000.txt,每个文件都包含文本
testing,
因此文件大小至少在几千字节的范围。现在让我们测试使用不同命令删除这些数量的文件的速度。首先让我们使用简单的 rm 命令,然后将使用带有 -exec 和 delete 选项的 find 命令来计算删除这些文件所需的时间。
[root@rumenz test]# time rm -f *
-bash: /bin/rm: Argument list too long
real 0m11.126s
user 0m9.673s
sys 0m1.278s
如果你看到我在 test 目录上运行的上述 rm 命令,其中包含 60 万个文件,它会给我一条消息说
/bin/rm: Argument list too long
。这意味着该命令没有完成删除,因为给 rm 命令的文件数量太大而无法完成。
使用find rm删除
代码语言:javascript复制现在让我们使用我们之前看到的带有 -exec 参数的 find 命令。
[root@rumenz test]# time find ./ -type f -exec rm {} ;
real 14m51.735s
user 2m24.330s
sys 9m48.743s
rm 用时14 分 51 秒
使用find delete删除
代码语言:javascript复制现在让我们通过在 find 命令中使用
-delete
选项来测试消耗的时间。
[root@rumenz test]# time find ./ -type f -delete
real 5m11.937s
user 0m1.259s
sys 0m28.441s
[root@rumenz test]#
-delete 选项只用了5分11秒
使用perl删除
代码语言:javascript复制[root@rumenz test]# time perl -e 'for(<*>){((stat)[9]<(unlink))}'
real 1m0.488s
user 0m7.023s
sys 0m27.403s
Perl 只用了大约1分钟就删除了该目录中的60万个文件。但是要对 Perl 正则表达式有一定的了解。
使用rsync删除文件
代码语言:javascript复制在我们的例子中
test
目录有 60 万个文件,让我们创建一个名为blanktest
的目录,为了简单的同步,它将保持为空。现在,我们将在 rsync 中使用 -delete 选项,这将删除目标目录中的所有文件,这些文件在源中不存在(在我们的例子中,源是一个空目录,所以在目标目录将被删除。)空目录
home/blanktest
,要清空/test
目录
[root@rumenz home]# time rsync -a --delete blanktest/ test/
real 2m52.602s
user 0m2.772s
sys 0m32.649s
因此与 find 命令相比,如果你想清空包含数百万个文件的目录,使用 rsync效果最好。