如何批量删除海量小文件

admin 2024年4月15日22:48:55评论3 views字数 1030阅读3分26秒阅读模式

在 Windows 上打开含有很多文件的目录时会卡死,通过文件管理器删除这类目录时也会卡死。

原因是文件管理会先将文件列表读入内存,当文件很多时就相当与使用 notepad 打开一个大文件。此时如果确定需要删除指定的目录,就不用打开查看了,直接在 git-bash 命令行删除。比如目标目录是 d:logs,则删除的命令行为:

$ cd /d$ time rm -rfv logs

在删的过程中可以看到删除过程,如果想保存删除日志,可以在命令后加上 tee 命令:

$ time rm -rfv logs | tee remove.log

这样删的缺点是不知道什么时候删完,以及当前删到哪里了。可以写个带进度条的脚本来实现过程查看。

如何批量删除海量小文件

首先创建一个待删除文件列表:

$ cd /d$ find logs -type f > flist.txt

带删除进度条的脚本如下,使用时将 os.remove 反注释,提前做好测试再真删。

from tqdm import tqdmimport timeimport osdef count_lines(filename):    with open(filename, 'r', encoding='utf-8') as file:        return sum(1 for line in file)def read_lines(filename):    with open(filename, 'r', encoding='utf-8') as file:        for line in file:            yield line.strip()  # 返回每一行并去除末尾的换行符# 文件列表filename = r'd:flist.txt'# 切换目录os.chdir(r"d:\")total = count_lines(filename)with tqdm(total=total, desc="Processing", unit=" numbers", ncols=80) as pbar:    for line in read_lines(filename):           # print(line)        # os.remove(line)        if os.path.exists(line):            # print(line)            # 删文件            # os.remove(line)            pass         else:            # print("文件不存在")            pass        pbar.update(1)        # 真删时注释掉 sleep,不然会很慢        time.sleep(0.1)

全文完。

如果转发本文,文末务必注明:“转自微信公众号:生有可恋”。

原文始发于微信公众号(生有可恋):如何批量删除海量小文件

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月15日22:48:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   如何批量删除海量小文件https://cn-sec.com/archives/2660733.html

发表评论

匿名网友 填写信息