• Linux下删除大量文件


    主要参考了http://www.slashroot.in/which-is-the-fastest-method-to-delete-files-in-linux

    首先建立50万个文件

    ➜  test   for i in $(seq 1 500000);do echo text >>$i.txt;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 timeit
    def main():
        for pathname,dirnames,filenames in os.walk('/home/username/test'):
            for filename in filenames:
                file=os.path.join(pathname,filename)
                os.remove(file)
     if __name__=='__main__':
        t=timeit.Timer('main()','from __main__ import main')
        print t.timeit(1)  
    ➜  ~  python test.py
    529.309022903

    大概用时9分钟。

    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

    16s,这个应该最快了。


    统计一下:

     命令耗费时间
    rm  文件数量太多,不可用
    find with -exec 50万文件耗时43分钟
    find with -delete 9分钟
    Perl 16s
    Python 9分钟
    rsync with -delete 16s
  • 相关阅读:
    屏幕适配-使用autoLayout
    linux下activemq安装与配置
    1
    java多线程之ForkJoinPool
    Java中线程的使用
    彻底理解数据库事务
    Java中的事务——全局事务与本地事务
    SpringMVC中的几种事务管理器
    Solr5.0.0定时更新索引
    Solr通过配DIH对数据库数据做索引
  • 原文地址:https://www.cnblogs.com/linxiyue/p/3536925.html
Copyright © 2020-2023  润新知