小樱 发表于 2016/2/3 03:34

Linux下快速删除大量文件/文件夹方法,rm -rf非常缓慢,如何加速

当我们在linux系统中要删除数万或者数十万甚至数百万的文件时使用rm -rf *就不太好用,因为要等待很长一段时间。在这种情况之下我们可以使用linux系统命令rsync来巧妙的处理。rsync实际上用的是替换原理,处理数十万个文件也是秒删。

假如你要在linux下删除大量文件,比如100万、1000万,像/var/spool/clientmqueue/的mail邮件, 像/usr/local/nginx/proxy_temp的nginx缓存等,那么rm -rf *可能就不好使了。

如果你单独用一块数据盘跑,或者进行了分区,那就好办了,直接看这个贴,进行格式化操作,3000W数据用sync删了几个小时还没完,格式化2分钟就能搞定。
http://bbs.itzmx.com/thread-10681-1-1.html


rsync安装,有些系统默认安装有该命令
ubuntu系统:apt-get install rsync
centos 系统:yum install rsync
其他的可以源码安装,到下面的网站下载
http://rsync.samba.org


rsync提供了一些跟删除相关的参数
rsync –help | grep delete
–del an alias for –delete-during
–delete delete files that don’t exist on the sending side
–delete-before receiver deletes before transfer (default)
–delete-during receiver deletes during transfer, not before
–delete-after receiver deletes after transfer, not before
–delete-excluded also delete excluded files on the receiving side
–ignore-errors delete even if there are I/O errors
–max-delete=NUM don’t delete more than NUM files
其中–delete-before 接收者在传输之前进行删除操作
可以用来清空目录或文件,如下:

示例
清空目录或文件,如下:
1、先建立一个空目录
mkdir -p /root/blank
2、用rsync删除目标目录
rsync --delete-before -d -a -H -v --progress --stats /root/blank/ /root/edatacache/
或者
rsync --delete-before -d /root/blank/ /root/edatacache/

这样/root/edatacache目录就被快速的清空了。

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

3、也可以用来删除大文件
假如我们在/root/下有一个几十G甚至上百G的文件data,现在我们要删除它
一、创建一个空文件
    touch /root/empty
二、用rsync清空/root/data文件
    rsync --delete-before -d --progess --stats /root/empty /root/data


注意:
当SRC和DEST文件性质不一致时将会报错
当SRC和DEST性质都为文件【f】时,意思是清空文件内容而不是删除文件
当SRC和DEST性质都为目录【d】时,意思是删除该目录下的所有文件,使其变为空目录
最重要的是,它的处理速度相当快,处理几个G的文件也就是秒级的事
最核心的内容是:rsync实际上用的就是替换原理

hhmx 发表于 2016/3/18 14:23

技术贴,留名
页: [1]
查看完整版本: Linux下快速删除大量文件/文件夹方法,rm -rf非常缓慢,如何加速