大量文件的复制和删除方案

Linux IT敢客 8个月前 (03-16) 8492次浏览 已收录 1个评论 扫描二维码

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

拷贝大量文件时,用 cp 有诸多不便(例如命令意外中断后,无法续传;如果强行覆盖的话,又会浪费时间;不覆盖的话,倒是可以通过 echo "n"|cp -r /source /destination 来完成,但是经过我的实验,在大量文件下,传递 n 给 cp 的覆盖提示也会时间延迟,所以对于已经存在的文件同样存在时间上的浪费)

        rsync 拥有很多特性,可以避免上面提到 cp 的种种不便,但是考虑到操作大量文件,就不得不考虑效率

下面是对大量文件的拷贝、删除操作,基于 cp、rm -rf、rsync 三种方式的效率对比。

实验过程拷贝 47G 的数据(大小基本分散在 25M 以下文件数量 11041 个)

一、拷贝

    1、通过 cp 方式

    time cp -rp -v /app/glusterfs/NetworkDisk /home/
    real    16m29.876s
    user    0m0.889s 
    sys     1m59.575s

    2、rsync 方式

    time rsync -av /app/glusterfs/NetworkDisk /home/
    real    16m34.557s    
    user    8m53.267s    
    sys     4m56.069s

二、删除

    1、通过 rm -rf

    time rm -rf /home/NetworkDisk
    real    0m3.341s    
    user    0m0.002s     
    sys     0m3.297s

    2、通过 rsync –delete

    rsync -a --delete /empty /home/NetworkDisk
    real    0m1.709s    
    user    0m0.014s    
    sys     0m1.573s

通过以上对比:

    貌似在复制速度上,两者不相上下

    而在删除操作上,我们看到 rsync –delete 比 rm -rf 快了约 2s。

    为了得出更可信的结果,我又做了针对 10W 小文件的操作对比,如下

    首先生成 10W 小文件

for i in {1..100000};do dd if=/dev/zero of=/app/test/$i bs=100k;done

一、拷贝

    1、

    time cp -rp -v /app/test /home/
    real    6m21.137s    
    user    0m1.848s    
    sys     0m34.099s

    2、

    rsync -av /app/test /home/、
    real    3m56.437s    
    user    1m53.502s    
    sys     1m21.125s

二、删除

    1、

    rm -rf /app/test
    real    0m4.527s    
    user    0m0.143s    
    sys     0m4.339s

    2、

    rsync -a --delete /empty /app/test
    real    0m0.122s    
    user    0m0.000s    
    sys     0m0.009s

通过以上对 10W 小文件的操作,可以得出结论,对于大量文件的拷贝、删除操作,rsync 相比较 cp 和 rm 还是有很大优势的


首先建立 50 万个文件

test  for i in $(seq 1 500000)
for> do
for> echo test >>$i.txt
for> done

1 rm

test  time rm -f *
zsh: sure you want to delete all the files in /home/hungerr/test [yn]? y
zsh: argument list too long: rm
rm -f *  3.63s user 0.29s system 98% cpu 3.985 total

由于文件数量过多,rm 不起作用。

2 find

test  time find ./ -type f -exec rm {} \;
find ./ -type f -exec rm {} \;  49.86s user 1032.13s system 41% cpu 43:19.17 total

大概 43 分钟。

3 find with delete

 test  time find ./ -type f -delete       
find ./ -type f -delete  0.43s user 11.21s system 2% cpu 9:13.38 total

用时 9 分钟。

4 rsync

首先建立空文件夹 blanktest

 ~  time rsync -a --delete blanktest/ test/
rsync -a --delete blanktest/ test/  0.59s user 7.86s system 51% cpu 16.418 total

16s,很好很强大。

5 Python

import os
import time
stime=time.time()
for pathname,dirnames,filenames in os.walk('/home/username/test'):
     for filename in filenames:
         file=os.path.join(pathname,filename)
         os.remove(file)
 ftime=time.time()
 print ftime-stime
 ~  python test.py
494.272291183

大概用时 8 分钟。

6 Perl

 test  time perl -e 'for(<*>){((stat)[9]<(unlink))}'
perl -e 'for(<*>){((stat)[9]<(unlink))}'  1.28s user 7.23s system 50% cpu 16.784 total


IT 敢客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:大量文件的复制和删除方案
喜欢 (155)
[313176056@qq.com]
分享 (0)
IT敢客
关于作者:
“我所做的一切都是为了方便我的生活~~~“
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(1)个小伙伴在吐槽
  1. ?
    Amber2018-04-11 11:44 回复 未知操作系统 | 未知浏览器