在Windows中删除大量文件的速度很慢


32

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

有没有一种方法可以删除Windows中的文件夹,而时间却不与其中的文件数量成比例?


Answers:


56

有没有一种方法可以删除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个文件/1.5万个文件夹:rmdir耗时约2.5小时,del+rmdir耗时约53分钟。更多信息在这里

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


包括在内的支持> nul
Nuktu'4

1
Windows会让我等待从旧版SDK的备份中扫描成千上万个文件。这至少要花一个小时,在我看来,这可能要花10分钟。我已将其放入蝙蝠文件中以供重复使用:gist.github.com/DavidEdwards/61d4d336232284b33b237b04da5bfe10
Knossos


1

有没有一种方法可以删除Windows中的文件夹,而时间却不与其中的文件数量成比例?

好吧,是的,格式化分区。令我有些惊讶的是,在过去的9年中没有人提出这一建议。

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


如果这太激进了,那么其他答案就是您唯一的希望。有一个很好的解释为什么会出现serverfault。它适用于linux和XFS文件系统,但此处适用相同的逻辑。您无法对内置OS功能进行太多改进。

但是,如果您知道要删除的所有文件的路径,则可以保存列出目录内容的呼叫,并直接删除呼叫,从而节省一些开销。虽然仍然与文件数成正比。

就个人而言,我喜欢进度报告中的一些内容,以确保自己程序不会死。所以我喜欢通过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 :)


0

安装gnutools for windows并运行:

find YOURFOLDER -type d -maxdepth 3 | xargs rm -Rf

0

确保您没有将文件备份到云中并尝试同时删除它们!

对于许多云备份解决方案,文件在备份时将被锁定,然后您必须等待对其进行备份。

如果遇到临时目录(或不需要备份的目录)的问题,请确保在备份集中未选择临时目录。


0

我发现具有几层目录的文件夹实际上会减慢Window迅速删除它们的能力。我正在做一个项目,该项目花了5个级别才能到达node_modules文件夹,即使删除该文件夹也总是一个野兽

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

在这种情况下,我最终要做的是导航到node_modules文件夹或具有最高级别的目录,然后一次开始选择并删除大约十二个目录。如果执行多个删除操作,这将迫使回收站在并行进程中工作,而不是在我认为它使用的单个线程中工作,从而极大地加快了进程。

当我最深的目录为空时,我会上几个级别并执行相同的操作。这使删除工作减少了,这使我花了一个多小时才几分钟。

这是一个非常手动的过程,可能会成功编写脚本,但这对我有用


-2

您是否尝试使用命令提示符

rmdir /s /q foldername

GUI中的所有大文件操作都很慢-主要是因为视觉反馈(进度条)必须重绘多次


5
这是无稽之谈。操作可能很慢,因为GUI需要对所有文件进行计数以估计所需的时间,但不是由于重新绘制。
本德尔

错误...我经常使用大型文件夹(主要是Win2k服务器),并使用TotalCommander来移动/复制/删除内容。我注意到,如果我最小化TC或在TC之上放置另一个应用程序窗口,则完成速度至少快50%。TC仍在重新粉刷面漆的东西,但是在合成时一切都被忽略了
2009年

6
您的计算机速度是否如此之慢,以致GUI操作会影响磁盘I / O性能?还是TotalCommander的编码差得令人难以置信?该磁盘比CPU,RAM和视频卡慢数百或数千倍。如果图形减慢了磁盘写入速度,则可能会出现重大问题。
Shiny先生和新安宇

1
该问题有一个原因,即“时间花费与文件数量不成正比”。我不希望速度提高50%。
Sindri Traustason 09年

@Sindri如果使用命令提示符方式,则系统开始发挥其魔力之前应该几乎没有延迟。据我了解,这种预处理就是您的问题所在。
nEJC
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.