因为业务侧使用时,一些脚本文件写的不够严谨,形成/var/spool/postfix/maildrop/目录常常被用户通知邮件文件堆满。而经过rm -rf * 删除时,会提示-bash: /bin/rm: Argument list too long 。经过ls |xargs rm -rf 进行删除时也耗时较长,这里能够经过rsync进行删除。bash
针对上面的问题,咱们能够经过如下方法清空该目录:函数
先建立一个空目录 mkdir /tmp/empty/ 清空目标目录 # rsync --delete-before -avH --progress --stats /tmp/empty/ /var/spool/postfix/maildrop
rsync --delete -rlptD /tmp/empty/ /var/spool/postfix/maildrop/
选项说明:工具
-delete-before 接收者在传输以前进行删除操做 –progress 在传输时显示传输过程 -a 归档模式,表示以递归方式传输文件,并保持全部文件属性 -H 保持硬链接的文件 -v 详细输出模式 –stats 给出某些文件的传输状态
不过在使用上面的命令进行清理时,存在一个问题,清空后,目标目录的权限会和源目录的权限同样。如:/tmp/empty是root:root,而maildrop以前是postfix:postdrop ,执行以后也会maildrop目录的权限也会变成root:root 。因为-a权限是-rlptogD几个参数的集合,因此能够将og(owner:group)两个参数去掉。清空时自动保持以前的目录权限,以下:post
rsync --delete -rlptD /tmp/empty/ /var/spool/postfix/maildrop/
为何rsync这么快呢?spa
rm删除内容时,将目录的每个条目逐个删除(unlink),须要循环重复操做不少次;rsync删除内容时,创建好新的空目录,替换掉老目录,基本没开销。想要深层次的区分两个命令在调用系统函数时的区别,可使用SystemTap工具进行分析(因为本人也不懂该工具的使用,因此这里就不献丑了)。code