`
jaychang
  • 浏览: 734501 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类
最新评论

Linux技巧:一次删除一百万个文件的最快方法

    博客分类:
  • OS
 
阅读更多

最初的测评

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

他没有使用find  xargs,他很有创意的利用了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.31
        System time (seconds): 10.60
        Percent of CPU this job got: 95%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 0:12.42
        Average shared text size (kbytes): 0
        Average unshared data size (kbytes): 0
        Average stack size (kbytes): 0
        Average total size (kbytes): 0
        Maximum resident set size (kbytes): 0
        Average resident set size (kbytes): 0
        Major (requiring I/O) page faults: 0
        Minor (reclaiming a frame) page faults: 24378
        Voluntary context switches: 106
        Involuntary context switches: 22
        Swaps: 0
        File system inputs: 0
        File system outputs: 0
        Socket messages sent: 0
        Socket messages received: 0
        Signals delivered: 0
        Page size (bytes): 4096
        Exit status: 0

# method 2
        Command being timed: "find b/ -type f -delete"
        User time (seconds): 0.41
        System time (seconds): 14.46
        Percent of CPU this job got: 52%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 0:28.51
        Average shared text size (kbytes): 0
        Average unshared data size (kbytes): 0
        Average stack size (kbytes): 0
        Average total size (kbytes): 0
        Maximum resident set size (kbytes): 0
        Average resident set size (kbytes): 0
        Major (requiring I/O) page faults: 0
        Minor (reclaiming a frame) page faults: 11749
        Voluntary context switches: 14849
        Involuntary context switches: 11
        Swaps: 0
        File system inputs: 0
        File system outputs: 0
        Socket messages sent: 0
        Socket messages received: 0
        Signals delivered: 0
        Page size (bytes): 4096
        Exit status: 0
# method 3
find c/ -type f | xargs -L 100 rm
~/test $ /usr/bin/time -v ./delete.sh
        Command being timed: "./delete.sh"
        User time (seconds): 2.06
        System time (seconds): 20.60
        Percent of CPU this job got: 54%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 0:41.69
        Average shared text size (kbytes): 0
        Average unshared data size (kbytes): 0
        Average stack size (kbytes): 0
        Average total size (kbytes): 0
        Maximum resident set size (kbytes): 0
        Average resident set size (kbytes): 0
        Major (requiring I/O) page faults: 0
        Minor (reclaiming a frame) page faults: 1764225
        Voluntary context switches: 37048
        Involuntary context switches: 15074
        Swaps: 0
        File system inputs: 0
        File system outputs: 0
        Socket messages sent: 0
        Socket messages received: 0
        Signals delivered: 0
        Page size (bytes): 4096
        Exit status: 0

# method 4
find d/ -type f | xargs -L 100 -P 100 rm
~/test $ /usr/bin/time -v ./delete.sh
        Command being timed: "./delete.sh"
        User time (seconds): 2.86
        System time (seconds): 27.82
        Percent of CPU this job got: 89%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 0:34.32
        Average shared text size (kbytes): 0
        Average unshared data size (kbytes): 0
        Average stack size (kbytes): 0
        Average total size (kbytes): 0
        Maximum resident set size (kbytes): 0
        Average resident set size (kbytes): 0
        Major (requiring I/O) page faults: 0
        Minor (reclaiming a frame) page faults: 1764278
        Voluntary context switches: 929897
        Involuntary context switches: 21720
        Swaps: 0
        File system inputs: 0
        File system outputs: 0
        Socket messages sent: 0
        Socket messages received: 0
        Signals delivered: 0
        Page size (bytes): 4096
        Exit status: 0

# method 5
~/test $ /usr/bin/time -v rm -rf f
        Command being timed: "rm -rf f"
        User time (seconds): 0.20
        System time (seconds): 14.80
        Percent of CPU this job got: 47%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 0:31.29
        Average shared text size (kbytes): 0
        Average unshared data size (kbytes): 0
        Average stack size (kbytes): 0
        Average total size (kbytes): 0
        Maximum resident set size (kbytes): 0
        Average resident set size (kbytes): 0
        Major (requiring I/O) page faults: 0
        Minor (reclaiming a frame) page faults: 176
        Voluntary context switches: 15134
        Involuntary context switches: 11
        Swaps: 0
        File system inputs: 0
        File system outputs: 0
        Socket messages sent: 0
        Socket messages received: 0
        Signals delivered: 0
        Page size (bytes): 4096
        Exit status: 0

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

[英文原文: A faster way to delete millions of files in a directory ]
分享到:
评论

相关推荐

    linux查找文件命令find

    Linux 查找文件命令 find Linux 操作系统中查找文件的命令是 find 命令,这个命令可以...find 命令是一个非常强大的命令,能够帮助用户快速地查找、删除、复制、移动文件等操作,是 Linux 系统中必不可少的命令之一。

    Linux小技巧收集

    本文将分享一系列提高Linux使用效率的小技巧,旨在帮助用户更好地掌握这一强大的操作系统。 #### 文本处理技巧 1. **查看文件的部分内容** - **查看文件的前几行**:`head`命令可以用来快速浏览文件的前几行。...

    linux运维常见的22个故障排查和解决方法

    **问题描述**:在实际工作中,可能会遇到这样的情况:一个看似正常的Shell脚本在Linux环境下无法执行,报出“:bad interpreter: No such file or directory”的错误。 **原因分析**:这种错误通常发生在使用Windows...

    Linux常用基本命令及应用技巧

    - **删除**:`rm`命令用于删除文件或目录,`rm -r directory`删除目录及其内容。 - **复制**:`cp`命令用于复制文件或目录,`cp file1 file2`复制单个文件。 - **查看文件内容**:`cat`, `more`, `less`等命令...

    linux 常用60个命令

    ### Linux常用60个命令详解 #### 一、安装和登录命令 ##### 1....以上列举了Linux中最常用的60个命令及其应用技巧,这些命令是日常管理和维护Linux系统的基础,掌握它们对于Linux用户来说至关重要。

    Linux经典实用的使用技巧33则

    在Bash shell中,使用`ESC + B`可以将光标向左移动一个字符,而`Ctrl + K`则用来删除光标至行尾的所有字符,这些快捷键提高了命令行的编辑效率。 #### 十七、进程筛选 使用`ps`命令结合`grep`可以筛选出符合条件的...

    Linux学习资料(基本命令、使用技巧、基础教程、高级技巧集)

    Linux是世界上最广泛使用的开源操作系统之一,它为用户提供了强大的服务器平台和桌面环境。这份"Linux学习资料"包含的资源旨在帮助初学者和进阶者掌握Linux的基础知识、使用技巧、高级应用以及C语言编程。 首先,让...

    Linux命令使用技巧集锦.pdf

    1. **使用`shutdown`命令:** 这是最常见的关闭Linux系统的方法之一。 ```bash sudo shutdown now ``` 或者 ```bash sudo shutdown -h now ``` 2. **使用`poweroff`命令:** 这个命令也可以立即关闭系统。 ...

    节省工作时间的linux技巧总结英文原文

    本文将介绍一些节省时间的Linux技巧,适合初学者和日常使用的程序员。 基础命令学习: 1. 学习基础的Bash。实际上,阅读整个bash手册页并不难,而且内容量适中。Bash是一个强大且通用的shell,尽管有其他替代的...

    linux一些使用技巧

    Linux操作系统是许多技术爱好者和...这些技巧只是Linux庞大知识体系的一部分,随着你对系统的深入理解,你会发现更多方便快捷的方法。记住,实践是最好的老师,多使用、多探索,你将会越来越熟悉这个强大的操作系统。

    linux vi 使用技巧

    ### Linux Vi 使用技巧详解 #### 一、引言 在 Linux 操作系统中,文本编辑器扮演着极其重要的角色,特别是在没有图形用户界面 (GUI) 的环境中。其中,Vi 编辑器是一款非常强大且历史悠久的文本编辑工具,被广泛...

    入门学习Linux常用必会60个命令实例详解doc/txt

    Linux 是一个真正的多用户操作系统,可以同时接受多个用户登录,还允许一个用户进行多次登录。这是因为Linux和许多版本的Unix一样,提供了虚拟控制台的访问方式,允许用户在同一时间从控制台(系统的控制台是与系统...

    绝对好用Linux认证的8个经典技巧.docx

    找到`loadlin.exe`和对应的Linux内核文件(如`vmlinuz`),将其复制到DOS分区,并创建一个批处理文件(如`Linux.bat`),输入启动命令,如`c: loadlin c:vmlinuz root=/dev/hda1 ro`,指定内核路径和root设备。...

    Linux快速入门教程

    本教程旨在帮助初学者快速掌握Linux系统的基本知识,内容涵盖命令行操作、文件管理、用户管理、进程控制、磁盘管理、软件安装、网络配置和常用使用技巧等多个方面。 在Linux中,shell是用户与操作系统交互的界面,...

    linux基础与应用linux系统常用技巧.docx

    ### Linux基础与应用:系统常用技巧详解 #### 一、处理特殊的文件名 在Linux系统中,文件命名具有一定的灵活性,这使得用户可以根据需求创建带有特殊字符的文件名。然而,当这些特殊字符出现在文件名中时,进行...

    Linux系统使用技巧八则.pdf

    如果此方法无效,可以切换到另一个控制台(`Ctrl+Alt+F2`),登录后执行`ps -ax | grep -St 'gX'`找出X服务器进程ID,然后使用`kill -9 PID_number`命令终止进程,最后通过`Alt+F1`返回原来的桌面环境。 2. **快速...

    linux技巧总结

    - `yum install yum-fastestmirror`:安装插件以自动选择最快的镜像源 5. **图形化 Yum**:`yumex` 是一个图形化的 Yum 工具,提供了更直观的界面,可方便地选择软件仓库。先通过 `yum install yumex` 安装,然后...

    快速编译Linux内核需要的模块方法

    传统的编译内核模块的方式可能涉及到复杂的配置和编译过程,但这篇文章介绍了一种快速编译所需内核模块的方法,尤其是对于那些需要支持NTFS文件系统的用户来说,这是一个非常实用的技巧。 首先,我们需要找到合适的...

    linux文件管理 .pdf

    Linux 文件管理是Linux操作系统中一个至关重要的部分,它关系到系统中数据的组织、存储和检索。Linux作为一个类Unix的操作系统,其文件管理采用的是树形目录结构,以根目录“/”开始,各个目录和文件形成分支结构。...

Global site tag (gtag.js) - Google Analytics