在 Windows 中删除大量文件很慢

在 Windows 中删除大量文件很慢

我有一台装有 NTFS 磁盘的 Windows XP 机器,删除大量文件的速度非常慢。如果我在文件夹树中选择一个包含大量文件的文件夹并删除(使用 shift-del 保存回收站),则在弹出确认框之前,删除时间似乎与文件夹中的文件数量成正比。然后删除文件夹中每个文件所需的时间甚至更长。

有没有办法删除 Windows 中的文件夹,并且所花的时间不与文件夹中的文件数量成比例?

答案1

有没有办法删除 Windows 中的文件夹,并且所花的时间不与文件夹中的文件数量成比例?

我不这么认为,但有些方法显然比其他方法快得多。

最糟糕的方法是发送到回收站:你仍然需要删除它们。其次是使用 Windows 资源管理器按 Shift+Delete:在开始删除任何内容之前,它会浪费大量时间检查内容。

rmdir /s/q foldername其次最好的方法是从命令行使用。del /f/s/q foldername也很好,但它留下了目录结构。

我发现最好的方法是使用两行批处理文件,第一遍删除文件并输出到 nul,以避免为每个单个文件写入屏幕的开销。第二遍清理剩余的目录结构:

del /f/s/q foldername > nul
rmdir /s/q foldername

根据对 Windows XP 加密磁盘进行的时间测试,这比单个 rmdir 快近三倍,删除 ~30GB/1,000,000 个文件/15,000 个文件夹:rmdir耗时 ~2.5 小时,del+rmdir耗时 ~53 分钟。更多信息这里

这对我来说是一项常规任务,因此我通常会将需要删除的内容移至 C:\stufftodelete,并将这些del+rmdir命令放在 deletestuff.bat 批处理文件中。此文件计划在晚上运行,但有时我需要在白天运行,因此越快越好。

答案2

有没有办法删除 Windows 中的文件夹,并且所花的时间不与文件夹中的文件数量成比例?

嗯,是的,格式化分区。我有点惊讶在过去的 9 年里没有人建议这样做。

这是非常激进的,但如果您预计会频繁对特定文件夹执行此操作,则可能值得为其创建一个单独的分区。


如果这太激进,其他答案是你唯一的希望。有一个很好的解释为什么服务器故障。它适用于 Linux 和 XFS 文件系统,但同样的逻辑也适用于此。您无法对内置操作系统功能进行太多改进。

但是,如果您知道要删除的所有文件的路径,则可以省去列出目录内容的调用,直接调用 remove,从而节省一些开销。不过,这仍然与文件数量成正比。

就我个人而言,我喜欢一些进度报告,以确保程序没有死掉。所以我喜欢通过 python 删除东西。例如,如果所有文件都在一个没有子目录的目录中:

import tqdm
import sys
import os

location = sys.argv[1]
directory = os.fsencode(location)

with os.scandir(directory) as it:
    for dir_entry in tqdm.tqdm(it):
        try:
            os.remove(dir_entry.path)
        except OSError:
            pass  # was not a file

这会在我的 12 年历史的 SEAGATE ST3250620NS 上每秒删除大约 250 个文件。我猜想在您的驱动器上删除速度会快得多。

但是,此时它只是微优化,所以除非你在一个目录中有数百万个文件,否则不会有太大作用。(就像我一样,哈哈,我做了什么 D:)

答案3

我使用 Hugo 的原始答案创建了一个 .bat 文件,用于删除 NPM 项目。我添加了一个路径变量,只需复制并粘贴一次路径。双击 .bat 文件,它就会完成所有工作 - 无需输入所有内容。

set path_to_delete="FOLDER_PATH"
del /f/s/q %path_to_delete% > nul
rmdir /s/q %path_to_delete%

使用示例:

set path_to_delete="C:\Projects\My React Project"
del /f/s/q %path_to_delete% > nul
rmdir /s/q %path_to_delete%

答案4

在带有 Linux 子系统(基本上是 Ubuntu shell)的较新版本的 Windows 10 上,您可以使用类似 的 Linux 命令rm -rf directory。这似乎是我的计算机上最快的方法。

相关内容