使用PowerShell仅在具有特定年龄的名为OLD的子目录中查找文件

时间:2010-04-21 06:57:42

标签: powershell

如何在包含多个OLD文件的目录树中获取一个很好的文件列表?

我希望只查看名为OLD的目录中具有特定年龄的文件。

2 个答案:

答案 0 :(得分:3)

据我所知,Raoul Supercopter's solution并没有完全回答这个问题。上述解决方案不是从名为“OLD”的目录中查找所有文件,而是查找名称中包含“OLD”的所有文件。

相反,我认为你要求的东西可以找到比名为OLD的目录中的某个日期更早的文件。

因此,要查找目录,我们需要以下内容:

dir -r | ? {$_.name -match "\bold\b" -and $_.PSIsContainer}

但是你需要能够以递归方式遍历每个目录并查找文件(以及可能包含在名为“OLD”的其他目录中的任何名为“OLD”的目录)的东西。

最简单的方法是编写一个函数,然后递归调用它,但是这是一种在一行上执行它的方法,它采用不同的策略(注意行继续符,这样就适合:

dir -r | ? {!$_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date 5/1/2006)} `
| ? {(% {$_.directoryname} | split-path -leaf) -eq "OLD"}

那么,这里发生了什么?

第一部分只是一个基本的递归目录列表。下一部分将检查您是否正在查看文件(!$_.PSIsContainer)并确保其符合您的年龄要求。 Get-Date部分周围的括号可以让您获得运行命令的结果。然后我们获取每个文件的目录名称,并使用split-path cmdlet获取最近目录的名称。如果那是“旧”,那么我们有一个符合您要求的文件。

答案 1 :(得分:1)

嗯,第一部分是列出所有文件,第二部分是过滤文件,最后是格式化输出。您可以使用Format-List或表格(但我附近没有安装PowerShell来测试它:])

$yourDate = Get-Date 5/1/2006
ls -recurse . | ? { $_.fullname -match "OLD" -and $_.lastwritetime -lt $yourDate } | % { $_.fullname }
当您为其指定特定日期作为参数时,

Get-Date会创建一个Date-Time对象。只需使用它并过滤。