AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 109269
Accepted
Beau
Beau
Asked: 2010-02-04 10:22:50 +0800 CST2010-02-04 10:22:50 +0800 CST 2010-02-04 10:22:50 +0800 CST

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

  • 772

问题是对目录的任何修改都会无限期地锁定 Explorer,尽管 Samba 对其他目录的访问仍然有效。我试过在本地和 Samba 上移动文件。

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

我尝试使用 Pythonwin32file.FindFilesIterator来迭代文件,但这也挂起。

我的想法是根据时间戳将每个文件移动到不同的目录(在我们正在处理的目录之上的目录中),这样我们在每个目录中最多会有一千个左右的文件......但是因为我什至无法枚举文件,这是一个非首发。

如果我不得不放弃并只删除目录,我愿意这样做,但标准删除也会无限期挂起。

我已经设置了这两个参数来提高速度,但它们也没有解决这个问题:

R:\>fsutil behavior query disablelastaccess
disablelastaccess = 1

R:\>fsutil behavior query disable8dot3
disable8dot3 = 1

这些都是连续图像,会遇到 8.3 文件名的“错误”,因此一个目录中的许多类似名称的文件可能需要很长时间来计算 8.3 文件名。据我了解,即使在启用 disable8dot3 之后,这些数据也会存储在文件系统中,因此它可能仍然会导致问题。

有任何想法吗?

windows-server-2003 ntfs
  • 8 8 个回答
  • 3476 Views

8 个回答

  • Voted
  1. StampedeXV
    2010-02-04T10:36:04+08:002010-02-04T10:36:04+08:00

    我不知道它是否会起作用,也不知道这对您来说是否实用,但是将硬盘放入 Linux 计算机并在 Linux 上尝试呢?

    (有可引导的 Live CD 可供下载 - 您甚至不必物理移动硬盘)。

    • 4
  2. John Gardeniers
    2010-02-04T19:56:17+08:002010-02-04T19:56:17+08:00

    你不应该做的两件事:

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

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

    短期解决方案 - 改用命令行或某种形式的脚本。

    长期解决方案 - 制定一个明智的方案,确保您在任何一个文件夹中的文件都不会超过几千个。

    • 1
  3. Best Answer
    JamesRyan
    2010-02-05T04:04:00+08:002010-02-05T04:04:00+08:00

    根据添加文件的方式以及文件夹碎片的严重程度,最快的方法甚至可能是移出您要保留的文件并核对分区!

    • 1
  4. Max Meents
    2011-01-03T11:11:10+08:002011-01-03T11:11:10+08:00

    你可以学习一点 ahk 或 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. 
    
    • 1
  5. Vivek Kumbhar
    2010-02-04T10:45:25+08:002010-02-04T10:45:25+08:00

    尝试使用 PowerShell。使用移动项 Cmdlet

    高温高压

    • 0
  6. user1686
    2010-02-04T10:58:38+08:002010-02-04T10:58:38+08:00

    总有cmd.exe它的del命令。

    • 0
  7. Helvick
    2010-02-04T11:47:06+08:002010-02-04T11:47:06+08:00

    您需要重新启动以使 FSUTIL 更改生效,以防万一。

    禁用 8.3 名称的 NTFS 功能(添加、删除、搜索)的一般复杂性顺序是 O(Log N),所以一旦事情达到这种状态,几乎你所做的任何事情都会花费相同的时间。

    如果系统上有任何 AV 处于活动状态,请在修复此问题时将其关闭。

    出于好奇,如果您使用 Robocopy 之类的工具将文件分块复制出来,您会获得更好的性能吗?我怀疑它不会有太大的不同,但它应该花费一半的时间删除(只有搜索涉及的目录而不是搜索然后删除条目)。不过,您最终仍然会遇到删除原件的问题。

    • 0
  8. user2969851
    2014-06-12T10:51:11+08:002014-06-12T10:51:11+08:00

    使用带有 /mov 选项的 robocopy

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

    例如,我有一个包含 1.2 m 电子邮件文件的文件夹,它会挂起资源管理器。这些文件从日期开始命名,因此我为一年中的每个月创建了文件夹,然后对文件名中的日期使用 robocopy 过滤。

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

    • 0

相关问题

  • 在域加入时将“工作站管理员”添加到本地管理员组

  • 如何轻松地将 DFS 共享移动到新驱动器?

  • 服务器 2003 R2 上的 Cisco VPN 客户端

  • 通过 VPN 更改 Active Directory 密码

  • 如何从 ISA 服务器后面安装 magento 扩展?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve