Linux下使用rsync最快速删除海量小文件文件的方法

Linux系统 gongyj 2214℃ 已收录 0评论

在使用Linux的时候,有时会遇到某个文件夹下有海量文件的情况小文件情况。如:网站代码目录的缓存存目录下cache中有大量的哈希目录和小文件。当你使用 rm 命令来删除的时候。要等待的时间太长,有时会报错。例如:

rm -rf *
-bash: /bin/rm: Argument list too long

所以必须要采取一些非常手段。我们可以使用rsync来实现快速删除大量文件。原理就是,使用一个空目录同步到目标文件,在同步前删除。

一、、先安装rsync:

yum install -y rsync

二、建立一个空的文件夹:

mkdir /data/blank

三、用rsync删除目标目录:

rsync --delete-before -d -a -H -v --progress --stats /tmp/test/ /data/website/cache/
  或者
rsync --delete-before -d /data/blank/ /data/website/cache/

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

选项说明:

–delete-before 接收者在传输之前进行删除操作
–progress 在传输时显示传输过程
-a 归档模式,表示以递归方式传输文件,并保持所有文件属性
-H 保持硬连接的文件
-v 详细输出模式
–stats 给出某些文件的传输状态
-d transfer directories without recursing

不过要注意目录的权限问题。上面的命令会将源目录的权限也同步过去。这样目标目录的权限就可能会发生改变。

尤其对于 /tmp 目录,不正确的目录权限会导致很多问题。如同步后 /tmp 目录的权限不对,导致 Centos 系统进不了桌面,其他服务报错等。/tmp 目录的权限为:

chmod 777 /tmp
chmod u+t /tmp


*这里说的小文件是占用磁盘空间很小的文件,假如我们在一个几十G甚至上百G的文件data,要删除它那么和 rm 没什么可比较的,速度一样。删除较大的文件,可以使用重定向符号 “>” 来清空文件,然后在 rm 删除即可,这样速度会很快。

echo "" > bigfile
  或
> bigfile


本站文章如未注明,均为原创丨本网站采用BY-NC-SA协议进行授权,转载请注明转自:http://blog.chopmoon.com/favorites/207.html
喜欢 (0)
发表我的评论
取消评论

表情 代码 贴图 加粗 链接 私信 删除线 签到

Hi,请填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
正在加载中……