Linux 快速删除百万级文件(rsync命令)

当我们想在linux下删除文件的时候,我们会想到通过rm命令来进行删除操作。 而当我们要删除的文件很多的时候,我们会遇到“/bin/rm: Argument list too long“的问题,上一篇文章我们已经介绍了通过find命令或者xargs命令或者自定义shell脚本的方法来避免这种错误。但是如果你想删除几十万或者上百万的文件的话,如果使用之前介绍的方法,效率会很低,删除所需要的时间也会很长。本文会介绍一种通过rsync命令来快速删除大批量文件的方法,并与之前的find命令结合rm命令删除文件的方法进行比较。

Find命令结合rm 命令删除文件

假如要删除当前目录下的上百万个文件(下面的例子以删除1000个文件做比较),执行下面的命令,并通过time命令来查看find /rm命令组合删除文件所需要的时间, 执行命令如下:

#time find  ./ -name * --exec rm –rf {} \;

命令输出如下:

root@devops:~/osetc# time find  ./ -name "*.txt" -exec rm  {} \;
real    0m0.543s
user    0m0.475s
sys     0m0.062s

通过rsync 命令快速删除百万级文件

首先要创建一个空的目录文件,执行命令:

#mkdir   /root/tmp

再通过rsync命令删除当前目录下的大批量文件,执行下面的命令:

#time rsync --delete-before -a -H --stats /root/tmp/  ./

命令输出如下:

root@devops:~/osetc# time rsync --delete-before -a -H --stats /root/tmp/  ./
Number of files: 1 (dir: 1)
Number of created files: 0
Number of deleted files: 1,002 (reg: 1,001, dir: 1)
Number of regular files transferred: 0
Total file size: 0 bytes
Total transferred file size: 0 bytes
Literal data: 0 bytes
Matched data: 0 bytes
File list size: 0
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total byes sent: 47
Total bytes received: 13,942
sent 47 bytes  received 13,942 bytes  27,978.00 bytes/sec
total size is 0  speedup is 0.00
real    0m0.058s
user    0m0.013s
sys     0m0.022s
root@devops:~/osetc#

从上面两个命令输出的执行时间,我们可以看到find命令运行时间是rsync命令删除文件所需要时间的9倍之多。故而,如果以后我们有这种删除百万级别的文件操作的时候,可以考虑使用rsync命令。


99%的人还阅读了:

Leave a Reply