开发者社区 问答 正文

linux 下快速删除大量文件?报错

假如你要在linux下删除大量文件,比如100万、1000万,像/var/spool/clientmqueue/的mail邮件, 

像/usr/local/nginx/proxy_temp的nginx缓存等,那么rm -rf *可能就不好使了。 
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 /data/blank 
2、用rsync删除目标目录 
rsync --delete-before -d /data/blank/ /var/spool/clientmqueue/ 
这样目标目录很快就被清空了 

又假如你有一些特别大的文件要删除,比如nohup.out这样的实时更新的文件,动辄都是几十个G上百G的,也可 

以用rsync来清空大文件,而且效率比较高 
1、创建空文件 
touch /data/blank.txt 
2、用rsync清空文件 
rsync -a --delete-before --progress --stats /root/blank.txt /root/nohup.out 
building file list ... 
1 file to consider 
blank.txt 
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/1) 

Number of files: 1 
Number of files transferred: 1 
Total file size: 0 bytes 
Total transferred file size: 0 bytes 
Literal data: 0 bytes 
Matched data: 0 bytes 
File list size: 27 
File list generation time: 0.006 seconds 
File list transfer time: 0.000 seconds 
Total bytes sent: 73 
Total bytes received: 31 

sent 73 bytes  received 31 bytes  208.00 bytes/sec 
total size is 0  speedup is 0.00 


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

展开
收起
爱吃鱼的程序员 2020-06-22 10:43:17 524 分享 版权
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    试了下rsync--delete-before并没有比rm快

    你好,你有poppler-qt4的库吗?能给我发送一份吗?万分感谢!我也在研究PDF读取!谢谢哈!你好,你有poppler-qt4的库吗?能给我发送一份吗?万分感谢!我也在研究PDF读取!谢谢哈! http://www.slashroot.in/which-is-the-fastest-method-to-delete-files-in-linux
    删除50万个文件,各种方法的速度对比:先创建50万个文件:foriin$(seq1500000);doechotesting>>$i.txt;done各种删除方法:timerm-f*删除失败,返回-bash:/bin/rm:Argumentlisttoolongtimefind./-typef-execrm{}\;timefind./-typef-deletetimersync-a--deleteEmptyDir/BigDir/timeperl-e'for(<*>){((stat)[9]<(unlink))}'结果:perl用了1分钟rsync用了3分钟findwith-delete用了5分钟findwith-exec用了14分钟直接用rm结果是删除失败
    shell会把"rm*"里面的*替换成一个实际的文件名列表,你试试rm-rfdir_name,这样会快很多顶一下
    2020-06-22 10:43:34
    赞同 展开评论