PS - 查找一段时间没有修改文件的文件夹



我们正在迁移FTP,我只想迁移其中包含过去6个月内使用/写入的文件的文件夹。我想这会是我在谷歌上到处都能找到的东西,但我发现的所有脚本都有同样的致命缺陷。

我发现的一切似乎都取决于";"修改日期";文件夹的。问题是,我有很多文件夹显示";"修改日期";几年前,当你深入研究它时,有一些文件是最近才创建和编写的。

示例:D:/Weblogs可能显示修改日期为2018年1月1日,然而,当你深入查看它时,会发现一些文件夹idk,名为";Log6";比方说,该文件夹中有一个日志文件,它是昨天才修改的。

我看到的所有这些脚本都提取了顶部文件夹的修改日期,这似乎并不准确。

有办法解决这个问题吗?我希望有这样的东西在某个顶层获取所有文件夹,然后遍历这些文件夹的CONTENTS,查找带有datemodified-lt-adddays(-180(筛选器的文件。如果东西是";新的";如果找到,则不要将总体目录添加到数组中,但如果没有,则列出该目录。

有什么想法吗?

编辑:我试过这个

$path = <some dir>
gci -path $path -Directory where-object {LastWriteTime -lt (get-date).addmonths(-6))} 

$filter = {$_.LastWriteTime -lt (Get-Date).AddDays(-180)}
#$OldStuff = gci "D:FTPBELAMIINC" -file | Where-Object $filter
$OldFolders = gci "D:FTPBELAMIINC" -Directory | ForEach-Object {
gci "D:FTPBELAMIINC" -file | Where-Object $filter
}
Write-Host $OldFolders

尝试一下,我添加了一些注释供您遵循思考过程。

-Force的使用主要是查找隐藏的文件和文件夹。

$path = '/path/to/parentFolder'
$limit = [datetime]::Now.AddMonths(-6)
# Get all the child folders recursive
$folders = Get-ChildItem $path -Recurse -Directory -Force
# Loop over the folders to see if there is at least one file
# that has been modified or accessed after the limit date
$result = foreach($folder in $folders)
{
:inner foreach($file in Get-ChildItem $folder -File -Force)
{
if($file.LastAccessTime -gt $limit -or $file.LastWriteTime -gt $limit)
{
# If this condition is true at least once, break this loop and return
# the folder's FullName, the File and File's Date for reference
[pscustomobject]@{
FullName       = $folder.FullName
File           = $file.Name
LastAccessTime = $file.LastAccessTime
LastWriteTime  = $file.LastWriteTime
}
break inner
}
}
}
$result | Out-GridView

如果您需要查找最近没有修改文件的文件夹,可以使用$folders数组并将其与$result:进行比较

$folders.where({$_.FullName -notin $result.FullName}).FullName

最新更新