Linux 删除大量文件的效率对比

删除大量小文件时,不同方法的效率差异巨大。先建立 50 万个测试文件:

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

下面逐一对比几种删除方式。

rm 删除

time rm -f *

由于文件数量过多(超出 shell 参数长度上限),rm 直接报 argument list too long,不可用。

find + exec 删除

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

约 43 分钟,非常慢。

find + delete 删除

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

约 9 分钟。

rsync 删除

先建立一个空文件夹 blanktest:

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

仅 16 秒。

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 分钟。

结果对比

方法 50 万文件耗时
rm -f * 不可用(参数过长)
find -exec rm {} \; 约 43 分钟
find -delete 约 9 分钟
Python os.remove 约 9 分钟
rsync --delete 约 16 秒

结论:删除大量小文件,rsync 最快、最方便。


   转载规则


《Linux 删除大量文件的效率对比》 由 吴杭沉 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
Ubuntu 完全卸载软件包 Ubuntu 完全卸载软件包
卸载软件时常常有配置残留,下面是一套完整的清理流程。 先查看已安装的相关软件: dpkg -l | grep 软件名 找到一大堆相关的包后,卸载核心的包: sudo apt-get remove --purge 软件包名 继续 grep,直
2018-10-18
下一篇 
Linux dd 命令 Linux dd 命令
dd 命令用于复制文件并对原文件的内容进行转换和格式化处理。 语法格式dd [OPTIONS]... 选项说明 选项 含义 if=文件名 指定源文件 of=文件名 指定目的文件 ibs=bytes 指定读入块大小为 byt
2018-09-20
  目录