暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

如何批量删除海量小文件

生有可恋 2024-04-16
180

在 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 tqdm
          import time
          import os


          def 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)

          全文完。

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

          文章转载自生有可恋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论