我经常在这个网站上找不到答案,但在这种情况下我需要更多个性化的帮助。我希望有人能指出我正确的方向。
我一直在努力从我的NAS系统上绘制报告以获取数据时代和数据大小的统计数据,因此我可以尝试提供退款/显示回退解决方案。
我设法使用get-childitem主要使用Powershell进行此操作,我甚至尝试使用[System.IO.Directory] :: EnumerateDirectories进入.net 和其他命令。所有这些解决方案都有效,但我得到这些信息的时间似乎很慢,特别是如果我将它与Jam TreeSize进行比较,后者可以很快地获取这些信息。
需要注意的是,我甚至尝试过在powershell中进行多线程处理,如果我能从各个点收集数据,它会收集整个数据的速度会更快,但我已经在很大程度上混合了结果。
我希望其他人之前已经处理过这种类型的项目,并设法快速(呃)这样做。我甚至对其他语言持开放态度。
快速说明,我在powershell v5中这样做。我也开始学习一点python,所以如果有人提出建议,那将是我学习的好地方。
编辑:
好以下是一些例子。 时报: Treesize需要10秒钟 Powershell Get-ChildItem大约需要2分钟 Powershell dotnet操作大约需要2分钟
对象数量为60 000个对象,大小为120gb。
带有recurse的get-childitem将获取指定位置的所有文件对象,包括它们的属性,例如上次访问的时间和以字节为单位的大小dotnet,你需要使用EnumerateFiles的组合等,然后用FileInfo循环它,这是get给定位置的文件对象,然后分别检查它们的属性就多线程而言,我会指出一些我使用过的链接,这里添加的内容太多了,但我尝试创建一个runspacepool,但我也尝试手动运行两个独立的运行空间来比较结果和它们大致相同。为什么我沉迷于时代,而我上面使用的测试目录只有2分钟,我的NAS在一些卷中有数百万个文件。我完成的一次测试需要一个半小时才能完成,如果我要用其他卷完成,那将花费数小时。我只想找到更接近Treesize的速度
修改:我已将robocopy解决方法标记为答案,但如果您对其他语言和程序有任何建议,请随时发表评论,我会在将来
答案 0 :(得分:3)
我去过那里,得到你想要的东西......至少是棘手的:TreeSize正在直接从MFT表中读取信息,而Get-ChildItem
正在更高层次上行动,已经在操作系统中。因此,速度变化很大。
因此,如果您想加快报告速度,您需要深入了解并在较低级别编写代码。
对我而言,即使它不是最快的解决方案,我也得到了妥协并使用了robocopy /l /log:c:\mylog.txt
(它不会复制一个字节,只需将文件记录到{{1} }),然后我解析了它。您可以使用多线程选项(mylog.txt
,其中N默认为8)来加快速度。
我认为这种方法有用的是,如果我需要进一步调查,我在文件中需要的所有数据,因此查询它会更快。静态,没有更新,但是当你谈论数百万个文件时,某个时刻的照片是一个很好的方法,我想。