zoukankan      html  css  js  c++  java
  • rsync快速删除海量文件

    由于业务侧使用时,一些脚本文件写的不够严谨,造成/var/spool/postfix/maildrop/目录经常被用户通知邮件文件堆满。而通过rm  -rf * 删除时,会提示-bash: /bin/rm: Argument list too long 。通过ls |xargs rm -rf 进行删除时也耗时较长,这里可以通过rsync进行删除。

    一、rsync删除文件

    针对上面的问题,我们可以通过以下方法清空该目录:

    先创建一个空目录
    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)两个参数去掉。清空时自动保持之前的目录权限,如下:

    rsync  --delete -rlptD /tmp/empty/ /var/spool/postfix/maildrop/

    二、rsync与rm 删除速度比较

    为什么rsync这么快呢?

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

  • 相关阅读:
    解决UITableView中Cell重用机制导致内容出错的方法总结
    Hdu 1052 Tian Ji -- The Horse Racing
    Hdu 1009 FatMouse' Trade
    hdu 2037 今年暑假不AC
    hdu 1559 最大子矩阵
    hdu 1004 Let the Balloon Rise
    Hdu 1214 圆桌会议
    Hdu 1081 To The Max
    Hdu 2845 Beans
    Hdu 2955 Robberies 0/1背包
  • 原文地址:https://www.cnblogs.com/thinkCoding/p/5733225.html
Copyright © 2011-2022 走看看