Linux rsync 快速删除

快速删除大量文件

  1. 先建一个空目录,随便位置
    mkdir /data/blank
  2. 用rsync删除目标目录
    rsync --delete-before -d /data/blank /the/folder/you/want/to/delete

注意不要忘了文件夹最后的/

rsync提供了一些跟删除相关的参数

rsync --help | grep delete
--del an alias for --delete-during
--delete-before receiver deletes before transfer (default)

这样我们要删除的log目录就会被清空了,删除的速度会非常快。rsync实际上用的是替换原理,处理数十万个文件也是秒删。
选项说明:

--delete-before 接收者在传输之前进行删除操作

--progress 在传输时显示传输过程

-a 归档模式,表示以递归方式传输文件,并保持所有文件属性

-H 保持硬连接的文件

-v 详细输出模式

-stats 给出某些文件的传输状态

不过在使用上面的命令进行清理时,存在一个问题,清空后,目标目录的权限会和源目录的权限一样。如:/tmp/empty是root:root,而maildrop之前是postfix:postdrop ,执行之后也会maildrop目录的权限也会变成root:root 。由于-a权限是-rlptogD几个参数的集合,所以可以将og(owner:group)两个参数去掉。清空时自动保持之前的目录权限,如下:
rsync --delete -rlptD /tmp/empty/ /var/spool/postfix/maildrop/

为什么rsync这么快呢?

rm删除内容时,将目录的每一个条目逐个删除(unlink),需要循环重复操作很多次;rsync删除内容时,建立好新的空目录,替换掉老目录,基本没开销。想要深层次的区分两个命令在调用系统函数时的区别,可以使用SystemTap工具进行分析(由于本人也不懂该工具的使用,所以这里就不献丑了)

猜你喜欢

转载自www.cnblogs.com/sayiqiu/p/10816572.html