我在 Windows 2003 文件服务器上有一个共享目录树,其中包含大约 100GB 的数据。我需要在此共享中找到所有顶级目录,其中上次修改时间每个子文件夹下的每个文件自 2011 年 1 月 1 日起未进行过修改。本质上,我正在寻找被放弃的共享。
目录结构如下所示:
-a
--a1
--a2
--a3
----a3_1
-b
--b1
--b2
-c
--c1
----c1_1
etc
我想要做的是找出一切这不是 a 或 b 或 c 下的隐藏文件,其修改日期不是在 1/1/11 之前或之后。
到目前为止,我可以使用以下命令找到每个文件一年后的修改时间:
get-childitem "\\server\h$\shared" -recurse | where-object {$_.mode -notmatch "d"} |
where-object {$_.lastwritetime -lt [datetime]::parse("01/01/2011")}
我不知道该怎么做,逐个检查每个顶层目录,看看其中包含的所有文件是否都超过一年。有什么想法吗?
答案1
我认为你只想看文件修改时间。不确定你想对只包含一年内未修改的子文件夹的文件夹做什么。我也不确定“每个顶级目录”,你的意思是a
,,b
或者,,...c
a
a1
a2
下面看看全部目录,并且仅列出不包含过去一年内编写的文件的目录。如果这产生了您想要的输出,请告诉我:
$shareName = "\\server\share"
$directories = Get-ChildItem -Recurse -Path $path | Where-Object { $_.psIsContainer -eq $true }
ForEach ( $d in $directories ) {
# Any children written in the past year?
$recentWrites = Get-ChildItem $d.FullName | Where-Object { $_.LastWriteTime -gt $(Get-Date).AddYears(-1) }
If ( -not $recentWrites ) {
$d.FullName
}
}
根据您的评论进行编辑。如果您只想获取不包含过去一年修改的文件的顶级目录,请尝试以下操作。请注意,在非常深/大的共享上,这可能需要一些时间才能运行。
$shareName = "\\server\share"
# Don't -recurse, just grab top-level directories
$directories = Get-ChildItem -Path $shareName | Where-Object { $_.psIsContainer -eq $true }
ForEach ( $d in $directories ) {
# Get any non-container children written in the past year
$recentWrites = Get-ChildItem $d.FullName -recurse | Where-Object { $_.psIsContainer -eq $false -and $_.LastWriteTime -gt $(Get-Date).AddYears(-1) }
If ( -not $recentWrites ) {
$d.FullName
}
}