查找并递归

find and recurse

我有一个文件夹结构d:\domains\<domain>\folder1\folder2\folderx

可能有 20 个 <domain> 文件夹,它们下面有不同级别的文件夹。

我想在所有文件夹中搜索 .php 个文件,并只打印它们退出的唯一 <domain> 个文件夹。

例如,如果在

中找到文件

我只想打印domain1.com,domain2.com。它需要在 PowerShell v2 中工作。

我有以下内容,但它只打印第一个域?

Get-ChildItem -Path @(Get-ChildItem -Path D:\domains | Where-Object {$_.PSIsContainer})[1].FullName -Recurse *.php |
    Select-Object -ExpandProperty FullName

枚举域文件夹,然后过滤其中包含 .php 个文件的文件夹。

Get-ChildItem 'D:\domains' | Where-Object {
    $_.PSIsContainer -and
    (Get-ChildItem $_.FullName -Filter '*.php' -Recurse)
}

如果您有 PowerShell v3 或更新版本,您可以使用 -Directory 开关而不是检查 $_.PSIsContainer:

Get-ChildItem 'D:\domains' -Directory | Where-Object {
    Get-ChildItem $_.FullName -Filter '*.php' -Recurse
}

Select 输出中的 Name 属性 如果您只需要 folder/domain 名称:

... | Select-Object -Expand Name