昨天,我看到一个非常有趣的删除一个目录下的海量文件的方法。这个方法来自http://www.quora.com/How-can-someone-rapidly-delete-400-000-files里的Zhenyu Lee。

他没有使用findxargs,他很有创意的利用了rsync的强大功能,使用rsync –delete将目标文件夹以一个空文件夹来替换。之后,我做了一个实验来比较各种方法。让我吃惊的是,Lee的方法要比其它的快的多。下面就是我的测评。

环境:

  • CPU: Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz
  • MEM: 4G
  • HD: ST3250318AS: 250G/7200RPM
Method # Of Files Deletion Time
rsync -a –delete empty/ s1/ 1000000 6m50.638s
find s2/ -type f -delete 1000000 87m38.826s
find s3/ -type f | xargs -L 100 rm 1000000 83m36.851s
find s4/ -type f | xargs -L 100 -P 100 rm 1000000 78m4.658s
rm -rf s5 1000000 80m33.434s

使用 –delete–exclude,你可以选择性删除符合条件的文件。还有一点,当你需要保留这个目录做其它用处时,这种方法是再适合不过了。

重新测评

几天前,Keith-Winstein在回复Quora上的这个帖子时说我之前的测评无法复制,因为操作的时间持续的太久。我澄清一下,这些数据过大,可能是因为我的计算机在过去的几年里做的事太多,测评中可能存在一些文件系统错误。但我不确定是这些原因。现在好了,我弄了一天比较新的计算机,把测评再做一次。这次我使用/usr/bin/time,它能提供更详细的信息。下面就是新的结果。

(每次都是1000000个文件。每个文件的体积都是0。)

Command Elapsed System Time %CPU cs (Vol/Invol)
rsync -a –delete empty/ a 10.60 1.31 95 106/22
find b/ -type f -delete 28.51 14.46 52 14849/11
find c/ -type f | xargs -L 100 rm 41.69 20.60 54 37048/15074
find d/ -type f | xargs -L 100 -P 100 rm 34.32 27.82 89 929897/21720
rm -rf f 31.29 14.80 47 15134/11

原始输出

# method 1
~/test $ /usr/bin/time -v  rsync -a --delete empty/ a/Command being timed: "rsync -a --delete empty/ a/"User time (seconds): 1.31System time (seconds): 10.60Percent of CPU this job got: 95%Elapsed (wall clock) time (h:mm:ss or m:ss): 0:12.42Average shared text size (kbytes): 0Average unshared data size (kbytes): 0Average stack size (kbytes): 0Average total size (kbytes): 0Maximum resident set size (kbytes): 0Average resident set size (kbytes): 0Major (requiring I/O) page faults: 0Minor (reclaiming a frame) page faults: 24378Voluntary context switches: 106Involuntary context switches: 22Swaps: 0File system inputs: 0File system outputs: 0Socket messages sent: 0Socket messages received: 0Signals delivered: 0Page size (bytes): 4096Exit status: 0# method 2Command being timed: "find b/ -type f -delete"User time (seconds): 0.41System time (seconds): 14.46Percent of CPU this job got: 52%Elapsed (wall clock) time (h:mm:ss or m:ss): 0:28.51Average shared text size (kbytes): 0Average unshared data size (kbytes): 0Average stack size (kbytes): 0Average total size (kbytes): 0Maximum resident set size (kbytes): 0Average resident set size (kbytes): 0Major (requiring I/O) page faults: 0Minor (reclaiming a frame) page faults: 11749Voluntary context switches: 14849Involuntary context switches: 11Swaps: 0File system inputs: 0File system outputs: 0Socket messages sent: 0Socket messages received: 0Signals delivered: 0Page size (bytes): 4096Exit status: 0
# method 3
find c/ -type f | xargs -L 100 rm
~/test $ /usr/bin/time -v ./delete.shCommand being timed: "./delete.sh"User time (seconds): 2.06System time (seconds): 20.60Percent of CPU this job got: 54%Elapsed (wall clock) time (h:mm:ss or m:ss): 0:41.69Average shared text size (kbytes): 0Average unshared data size (kbytes): 0Average stack size (kbytes): 0Average total size (kbytes): 0Maximum resident set size (kbytes): 0Average resident set size (kbytes): 0Major (requiring I/O) page faults: 0Minor (reclaiming a frame) page faults: 1764225Voluntary context switches: 37048Involuntary context switches: 15074Swaps: 0File system inputs: 0File system outputs: 0Socket messages sent: 0Socket messages received: 0Signals delivered: 0Page size (bytes): 4096Exit status: 0# method 4
find d/ -type f | xargs -L 100 -P 100 rm
~/test $ /usr/bin/time -v ./delete.shCommand being timed: "./delete.sh"User time (seconds): 2.86System time (seconds): 27.82Percent of CPU this job got: 89%Elapsed (wall clock) time (h:mm:ss or m:ss): 0:34.32Average shared text size (kbytes): 0Average unshared data size (kbytes): 0Average stack size (kbytes): 0Average total size (kbytes): 0Maximum resident set size (kbytes): 0Average resident set size (kbytes): 0Major (requiring I/O) page faults: 0Minor (reclaiming a frame) page faults: 1764278Voluntary context switches: 929897Involuntary context switches: 21720Swaps: 0File system inputs: 0File system outputs: 0Socket messages sent: 0Socket messages received: 0Signals delivered: 0Page size (bytes): 4096Exit status: 0# method 5
~/test $ /usr/bin/time -v rm -rf fCommand being timed: "rm -rf f"User time (seconds): 0.20System time (seconds): 14.80Percent of CPU this job got: 47%Elapsed (wall clock) time (h:mm:ss or m:ss): 0:31.29Average shared text size (kbytes): 0Average unshared data size (kbytes): 0Average stack size (kbytes): 0Average total size (kbytes): 0Maximum resident set size (kbytes): 0Average resident set size (kbytes): 0Major (requiring I/O) page faults: 0Minor (reclaiming a frame) page faults: 176Voluntary context switches: 15134Involuntary context switches: 11Swaps: 0File system inputs: 0File system outputs: 0Socket messages sent: 0Socket messages received: 0Signals delivered: 0Page size (bytes): 4096Exit status: 0

我真的十分好奇为什么Lee的方法要比其它的快,竟然比rm -rf也要快。如果有人知道,请写在下面,非常感谢。

[英文原文: A faster way to delete millions of files in a directory ]

转载于:https://www.cnblogs.com/hubing/p/3194378.html

Linux技巧:一次删除一百万个文件最快方法相关推荐

  1. Linux下程序崩溃dump时的 core文件的使用方法

    Linux下程序崩溃dump时的 core文件的使用方法 1.在启动程序前执行 ulimit -c unlimited unlimited 表示生成文件的大小限制,也可以修改为自定义的大小,例如: u ...

  2. linux使用grep查找文件内容,Linux中使用grep命令搜索文件名及文件内容的方法

    这篇文章主要介绍了Linux中使用grep命令搜索文件名及文件内容的方法,同时文中还介绍了将匹配结果高亮显示的方法,相当实用,需要的朋友可以参考下 从文件中搜索并显示文件名 当从多个文件中搜索时,默认 ...

  3. 计算机的c盘里不存东西了,小技巧教你删除C盘中无用文件

    电脑使用的时间久了,就会在C盘中留下许多的无用文件,导致电脑的运行速度变慢.然而C盘又是系统盘,里面的一些文件又不能随便删除.因此,今天U大侠小编就和大家说说删除C盘无用文件的技巧. 文件 1.电脑桌 ...

  4. linux HPA隐藏分区,删除HPA隐藏分区有两种方法

    删除HPA隐藏分区有两种方法: 1.是常规方法,利用品牌机自带卸载程序.这个不说了,卸载这个程序HPA就不在人间了. 2.是用MHDD命令释放分区. MHDD 是一款由俄罗斯人所开发的免费硬盘实体扫描 ...

  5. linux删除百万个文件夹,linux下如何删除一百万个文件

    今日QA发了个请求,要求删除某目录下指定格式的文件. [[email protected] resin-3.1.9]# ls | wc -l 1013964 统计了下,有一百万多个文件! 而且文件的命 ...

  6. linux查询设备文件信息失败怎么办,Linux下使用blkid命令查询设备及文件系统信息的方法...

    在Linux下可以使用blkid命令对查询设备上所采用文件系统类型进行查询.blkid主要用来对系统的块设备(包括交换分区)所使用的文件系统类型.LABEL.UUID等信息进行查询.要使用这个命令必须 ...

  7. linux服务器和个人mac笔记本互传文件的一个方法

    1.如果你的个人笔记本是mac,想和linux超算(服务器)互传文件,直接去App Store下载zen Trem Lite就可以实现.填写好后,点击确定 即可连接. 2.上传与下载 从mac上传到服 ...

  8. linux后缀为tar.xz,xz后缀名文件解压方法

    后缀名为xz的这种文件是使用tar打包后再压缩生成的.解压方法是: 1.xz -d **.tar.xz 2.tar -xvf **.tar 如没有按照xz工具,则首先需要下载.安装xz工具: http ...

  9. Linux中在终端打开图形界面的文件夹的方法

最新文章

  1. 想提高代码水平,做到这点就够了
  2. Fiddler的学习
  3. Linux安全渗透教程——大学霸内部资料
  4. 训练 yolo 模型
  5. Android程序设计基础
  6. python3 logging模块
  7. php的declare命令
  8. 论文浅尝 | 知识库问答中关系检测的学习表示映射
  9. 终于有人把5G和边缘计算的关系说清楚了 | 技术头条
  10. Qt学习笔记-Qt5程序开机自启动(windows)
  11. echarts柱状图x轴 label一行超过设置的字数换行
  12. 华为云FusionInsight MRS在金融行业存算分离的实践
  13. Java 如何抛出异常、自定义异常、手动或主动抛出异常
  14. linux下载git并为git配置连接ssh
  15. 思辨与立场阅读笔记-02 成为你自己思维的批判家
  16. 【JSP】关于The JSP specification requires that an attribute name is preceded by whitespace
  17. C++程序设计重点总结(谭浩强版)
  18. Demo:校验_SAP刘梦_新浪博客
  19. java页面展示流式图片,javascript瀑布流式图片懒加载实例解析与优化
  20. 各种杂项组件(1)之--Toast(提示框)

热门文章

  1. 操作系统--死锁避免(银行家算法)
  2. hadoop实例分析之WordCount单词统计分析
  3. 【IT笔试面试题整理】数组中出现次数超过一半的数字
  4. leetcode刷题 15.三数之和
  5. 【Android】如何查看android cpu是32位还是64位
  6. Linux命令关机/重启和Windows系统dos命令关机/重启
  7. 借钱,一定要有还钱的素质
  8. java实体设置扩展属性setextattributes_transactionAttributes各属性意义及配置
  9. 汇编 begin_【精品】小学作文500字汇编九篇
  10. ie8不发送ajax,IE8用ajax访问不能每次都刷新的问题