您的位置:首页 > 其它

rsync快速删除大量小文件

2017-03-29 14:44 369 查看
由于业务需要,每天会上传上千万个压缩的日志包,在一次做临时处理的时候,需要将这些数据包从云存储上面下载下来,做处理,BUT,做完处理之后忘记将这些包删掉了,so,临时积累了好多包,磁盘的inode都满了,,后来想办法要删掉这些文件,rm -f 根本不管用,后来网上搜索了一下,用rsync命令进行删除操作,后来尝试了一下:
新建了一个空的文件夹:

mkdir empty


然后:

rsync --delete-before -d empty/ app/
rsync --delete-before -d empty/ portal/


将app文件夹和portal文件夹下的文件清空,后来试了一下确实好使,不过速度也确实需要等待一会。将文件清空了之后,发现文件夹的大小并没有改变(这个是记录磁盘文件夹文件的inode的文件么?),后来直接将文件夹删掉:

rm -rf app/
rm -rf portal/


这样算是彻底清空了。下面整理了一下关于rsync命令快速删除大量文件的说明:

1.----------------------------------------------------------

rsync --delete-before --force -r empty/ app/


选项说明:

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


注意:

empty是我们提前建立的文件夹,后面的/app是我们要删除的文件的所在目录。

当SRC和DEST文件性质不一致时将会报错

当SRC和DEST性质都为文件【f】时,意思是清空文件内容而不是删除文件

当SRC和DEST性质都为目录【d】时,意思是删除该目录下的所有文件,使其变为空目录

 
可能遇到的问题:
rsync
'cannot delete non-empty directory' errors, even with --force option

cannot delete non-empty directory
 错误在同步source side的时候,你希望执行 
rsync --delete
. Rsync 不会让你删除不包含在同步目录内的文件。添加 
--delete-excluded
 选项即可解决。

参考:
http://serverfault.com/questions/573392/rsync-cannot-delete-non-empty-directory-errors-even-with-force-option http://blog.csdn.net/knowledgeaaa/article/details/41038967
2-------------------------------------------

rsync --delete-before -d -a -H -v --progress --stats empty/ app/


  或者

  

rsync --delete-before -d /data/blank/ /var/edatacache/
  这样/var/edatacache目录就被快速的清空了。
  选项说明:
  –delete-before 接收者在传输之前进行删除操作
  –progress 在传输时显示传输过程
  -a 归档模式,表示以递归方式传输文件,并保持所有文件属性
  -H 保持硬连接的文件
  -v 详细输出模式
  –stats 给出某些文件的传输状态
  -d transfer directories without recursing


  三、也可以用来删除大文件

  假如我们在app/下有一个几十G甚至上百G的文件data.log,现在我们要删除它

  1)、创建一个空文件

  touch empty

  2)、用rsync清空/root/data文件

  rsync --delete-before -d --progess --stats empty/ app/data.log

  注意:

  当SRC和DEST文件性质不一致时将会报错

  当SRC和DEST性质都为文件【f】时,意思是清空文件内容而不是删除文件

  当SRC和DEST性质都为目录【d】时,意思是删除该目录下的所有文件,使其变为空目录

参考:http://www.xitongzhijia.net/xtjc/20150410/44874.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  rsync 删除文件