如何移动或删除NTFS驱动器上包含200万个文件的文件夹?

问题是,对目录的任何修改都会无限期地locking资源pipe理器,尽pipeSamba对其他目录的访问仍然有效。 我试过在本地和Samba上移动文件。

即使枚举目录以获取文件列表也会无限期地locking计算机。

我尝试使用Python的win32file.FindFilesIterator迭代文件,但也挂起。

我的想法是根据时间戳将每个文件移动到不同的目录(位于我们正在处理的目录之上的目录中),以便每个目录中最多有一千个左右的文件…但是我甚至无法枚举这些文件,这是一个不起眼的东西。

如果我不得不放弃,只是努力的目录我愿意这样做,但一个标准的删除也无限期挂起。

我已经设置了这两个参数来提高速度,他们也没有帮助这个问题:

 R:\>fsutil behavior query disablelastaccess disablelastaccess = 1 R:\>fsutil behavior query disable8dot3 disable8dot3 = 1 

这些都是连续的图像,会遇到8.3错误的文件名,因此一个目录中的许多类似命名的文件可能需要很长时间来计算8.3文件名。 据我所知,即使disable8dot3启用后,这些数据仍然存储在文件系统中,所以它可能仍然是造成这个问题的原因。

有任何想法吗?

根据文件的添加方式以及文件夹的分散程度,最快的方法甚至可能是移走你想要保留的文件和核心分区!

我不知道它是否会起作用,既不是对你来说是实用的方法,但是把硬盘放到Linux计算机上并用Linux试一试呢?

(有可下载的可启动Live CD – 你甚至不需要物理移动硬盘)。

你不应该做两件事:

  1. 将如此多的文件放在一个文件夹中
  2. 使用Windows资源pipe理器来查看这样的文件夹,更不用说试着用它做任何事情。

正在发生的事情是,资源pipe理器正在访问这些文件中的每一个文件,以获得将会或可能在资源pipe理器界面中显示的信息。 此外,如果您有访问防病毒扫描的function(如果没有,为什么不),每个文件都将被扫描,即使只是确定它是否是应该扫描的types之一。 所有这些处理这么多文件需要很长时间。

短期解决scheme – 改为使用命令行或某种forms的脚本。

长期解决scheme – 制定一个合理的scheme,以确保您永远不会有超过几千个文件在任何一个文件夹。

你可以学习一点啊或PHP。 ahk会更容易学习, http: //webchat.freenode.net/?channels=#ahk上的某个人可能会愿意帮助你把东西弄到一起。

 quick ex. from when I needed to do this... 
 Loop, C:\Users\PC\Web Sites\Folderwithtomanyfiles\*.htm, , 1 ; Recurse into subfolders. { Match := Match1 := name := name1 := M := File := total++ ;the names of my files were each 7digits with some extra info I didn't want to share here so... RegExMatch(A_LoopFileFullPath, "Folderwithtomanyfiles\\(\d{7}.*?htm)", name) RegExMatch(A_LoopFileFullPath, "Folderwithtomanyfiles\\(\d{7})", Match) StringTrimLeft, Ma, Match1, 6 M .= Ma . "\" StringTrimLeft, Ma, Match1, 5 M .= Ma . "\" StringTrimLeft, Ma, Match1, 4 M .= Ma . "\" StringTrimLeft, Ma, Match1, 3 M .= Ma . "\" StringTrimLeft, Ma, Match1, 2 M .= Ma . "\" StringTrimLeft, Ma, Match1, 1 M .= Ma FileCreateDir, C:\Users\PC\Web Sites\fewer file names\%M% FileAppend, %File%, C:\Users\PC\Web Sites\fewer file names\%M%\%name1% created++ } MsgBox Created %created% out of %total% } ;example of path ... ;"C:\Users\PC\Web Sites\fewer file names\3\33\233\5233\35233\435233\0435233.htm ;turns out I should have put a few thousand files in each folder but oh well, hope the example helps. 

尝试使用PowerShell。 使用Move-Item Cmdlet

HTH

总是有cmd.exedel命令。

您将需要重新启动FSUTIL更改才能生效,以防万一您没有。

禁用8.3名称的NTFS函数(添加,删除,search)的复杂性的一般顺序是O(日志N),所以一旦事情进入这种状态,几乎任何事情都将花费相同的时间长度。

如果您在系统上有任何AV激活,请在解决此问题时将其closures。

出于好奇,如果你用Robocopy之类的东西把文件复制出来,你会获得更好的性能吗? 我怀疑它不会有太大的区别,但它应该花费一半的删除时间(只有search目录涉及不是search,然后删除条目)。 不过最终还是会有删除原件的问题。

使用/ mov选项的robocopy

http://technet.microsoft.com/en-us/library/cc733145.aspx

例如,我有一个文件夹中有1.2米的电子邮件文件,这将挂起浏览器。 这些文件是从date开始命名的,因此我为每年的每个月创build了文件夹,然后在文件名中使用了robocopy过滤date。

robocopy e:\ sent-old \ e:\ sentmail \ 2013-4 201304 *。* / mov