我们有多个文件服务器,其中包含了TB级和TB级的文件。 目前我们还没有系统存档/删除陈旧的数据。 我的任务是创build一个脚本,将移动/删除3年以上的文件。 移动/删除文件,只是“获取”文件是一个问题。 到目前为止使用Powershell。
我遇到了文件名/path长度超过248个字符的文件,Powershell似乎无法处理。 我也研究过Robocopy,但Robocopy无法访问LastAccessTime文件属性。 加上Powershell似乎真的很慢。 这是我一直在testing的代码:
Get-ChildItem "\\path" -Force -Recurse | where {!($_.PSIsContainer) -and ($_.LastAccessTime -lt (Get-Date).AddYears(-3))} | select Mode,LastAccessTime,Length,Name
我的问题是 :是否有一个更快,更有效的方式来“获得”价值万亿字节的文件recursion(包括LastAccessTime属性),其中一些path超过248个字符?
主要是寻找免费的解决scheme,但如果有一些好的付费解决scheme,我会愿意检查出来。
如果您使用的是Win2k8或更新的版本,则可以使用“文件服务器资源pipe理器”创build一个文件过期任务,该任务将将比x旧的文件移动到不同的目录。
代码示例将会很慢,因为您在应用filter之前recursion地枚举每个文件和目录。 这不是PowerShell的错,.NET中的底层文件系统类实际上是非常快的。
你想使用内置的filter参数,而不是pipe道到哪里对象(一般来说,过滤尽可能“左”)。
不久前,我在PowerShell中做了一些类似的事情。 它需要年龄和年龄。 幸运的是我已经安装了Cygwin,可以使用native * nix命令testing相应的操作。 时间的差异是惊人的。
因此,速度缓慢与Windows或文件系统本身不太相关,而更多与所用语言的执行效率有关。
path深度/长度我还没有尝试过,但对于这些非常耗时的文件处理任务,我现在使用cygwin在Windows机器上的PowerShell。 它很糟糕,但它是。
可能还有其他更值得推荐的替代方法,这些替代方法也比windows本地命令更加快速的文件操作。 如果有的话,我的想法就很多了。
我只是要使用Robocopy并通过LastModifiedDate。