2017-04-03 79 views
3

我经常在本网站上找到我的答案,但是在这种情况下我需要更多的个性化帮助。我希望有人能指出我正确的方向。文件年龄报告

我一直在试图从我的NAS系统中抽出一份报告来获得数据年龄和数据大小的统计数据,所以我可以尝试提供一个Charge Back/Show back解决方案。

我已经设法使用get-childitem主要使用Powershell,我甚至尝试使用[System.IO.Directory] ​​:: EnumerateDirectories, 和其他命令进入.net。所有这些解决方案都能正常工作,但是我似乎获得这些信息的速度非常缓慢,尤其是当我将它与Jam TreeSize进行比较时,它可以很快地将这些信息完全保存下来。

要注意的是,我甚至尝试了PowerShell中的多线程,认为如果我可以从各个点收集数据,它会收集整个数据会更快,但我已经在很大程度上混合了结果。

我希望别人已经解决了这种类型的项目,并设法得到一个很好的快速(呃)这样做的方式。我甚至可以开放其他语言来解决这个问题。

快速笔记,我在PowerShell v5中这样做。我也开始学习一些python,所以如果有人有建议,它将是我学习的好地方。

编辑:

好的这里有一些例子。 时报: 的TreeSize需要10秒 Powershell的获取,ChildItem约需2分钟 Powershell的dotnet的行动大约需要2分钟

对象

数计60个000物体,大小120GB。

带有递归的get-childitem将获得指定位置的所有文件对象,包括它们的属性,例如上次访问的时间和大小(以字节为单位)dotnet您需要使用EnumerateFiles等的组合,然后使用FileInfo获取给定位置的文件对象,然后分别检查它们的属性

就多线程而言,我会指出您使用的一些链接,这里添加的内容太多了,但我已尝试创建一个runspacepool ,但我也尝试手动运行两个单独的运行空间来比较结果,它们大致相同。为什么我沉迷于时代,而我上面使用的测试目录只有2分钟,我的NAS在一些卷上有数百万个文件。我所做的一项测试花了一个半小时才完成,如果我用其他卷做这个测试,那需要几个小时。我只是想找到速度接近的TreeSize

编辑:我已标记ROBOCOPY解决方法的答案,但如果你有不同的语言和程序的任何建议,请随时发表评论,这将是东西我将在未来展望

+3

你可以发布你使用的代码,他们正在采取什么样的时间,你想获得什么信息? –

+0

虽然这个话题可能很有趣,但问题太广泛了。 – LotPings

+0

评论并不代表本网站查询不存在的信息。请编辑您的问题,以便跟进读者不需要阅读所有这些内容。 (我没有,我也不打算) – LotPings

回答

3

我一直在那里,并得到你想要的是......棘手的,至少:TreeSize直接从MFT表中读取信息,而Get-ChildItem是在更高层次上行事,已经在OS中。因此,速度变化很大。

所以,如果你想加快你的报告,你真的需要在底层和底层代码的东西。

对我来说,即使它不是最快的解决方案,我得到了一个妥协,并使用robocopy /l /log:c:\mylog.txt(它不复制一个字节,只是将文件记录到mylog.txt),然后我解析了它。您可以使用多线程选项(/MT:[N],其中N默认为8)进行加速。

我发现这种方法有用的是,如果我需要进一步调查,我有我需要在文件中的所有数据,因此查询它会更快。静态的,没有更新,但是当你在谈论数百万个文件时,我认为某个时刻的照片是一个好方法。

+0

感谢curropar,明天我会给这个bash,看看我是怎么来的。感谢您的建议 –

+3

只有在以管理员身份启动并且仅在扫描完整本地驱动器时,TreeSize才会使用MFT。 MFT尤其在旧硬盘上更快,固态硬盘上的速度增加可以忽略不计。 TreeSize Professional提供了许多客户用于例如命令行选项的命令行选项。生成文件年龄统计信息。完全公开:我是TreeSize的作者,请告知我们您的报告是否缺少某项功能。 –

+0

感谢您的澄清,@JoachimMarder!我以系统管理员的身份工作,通常我通过管理员权限启动它,并根据卷的根目录找到卷为什么几乎满了,这就解释了我的经验。关于去专业,嗯,这不是我的决定,可悲的是。 – curropar