Powershell:Get-ChildItem路径中的多个通配符

问题描述 投票:0回答:2

我试图在Powershell中使用Get-ChildItem(我正在使用ls别名)以仅返回特定文件夹结构内的文件。

例如,我正在尝试列出名称以.foobar.txt结尾的所有文件,这些文件位于src文件夹中,该文件夹又位于even文件夹中。我尝试使用命令ls -r *\even\src\*.foobar.txt | % FullName。我认为路径中的第一个通配符*将允许以\even\src\结尾的任何路径,而第二个通配符将仅匹配以.foobar.txt结尾的文件。但这并没有返回我期望的所有文件。这是我正在其中测试的目录的结构:

root
|- project1
|  |- odd
|     |- src
|     |  |- a.foobar.txt
|     |  |- b.foobar.txt
|     |  |- c.snafu.txt
|     |
|     |- temp
|        |- a.foobar.txt
|        |- b.foobar.txt
|        |- c.snafu.txt
|
|- project2
|  |- folder1
|     |- folder2
|        |- folder3
|           |- folder4
|              |- even
|                 |- src
|                 |  |- a.foobar.txt
|                 |  |- b.foobar.txt
|                 |  |- c.snafu.txt
|                 |
|                 |- temp
|                    |- a.foobar.txt
|                    |- b.foobar.txt
|                    |- c.snafu.txt
|
|- project3
|  |- odd
|     |- src
|     |  |- a.foobar.txt
|     |  |- b.foobar.txt
|     |  |- c.snafu.txt
|     |
|     |- temp
|        |- a.foobar.txt
|        |- b.foobar.txt
|        |- c.snafu.txt
|
|- project4
   |- even
      |- src
      |  |- a.foobar.txt
      |  |- b.foobar.txt
      |  |- c.snafu.txt
      |
      |- temp
         |- a.foobar.txt
         |- b.foobar.txt
         |- c.snafu.txt

以上命令的输出是

root\project4\even\src\a.foobar.txt
root\project4\even\src\b.foobar.txt

但是,我期待中

root\project2\folder1\folder2\folder3\folder4\even\src\a.foobar.txt
root\project2\folder1\folder2\folder3\folder4\even\src\b.foobar.txt
root\project4\even\src\a.foobar.txt
root\project4\even\src\b.foobar.txt

如何更改命令,以便它还能在project2文件夹中找到文件?

powershell wildcard directory-structure ls get-childitem
2个回答
1
投票

分为2个步骤。首先递归所有目录,过滤出所需的目录,然后通过另一个get-childitem将结果通过管道传递,该目录过滤出所需的文件名:

ls -Recurse -Directory | where {$_.FullName -like "*\even\src"} | ls -filter  *.foobar.txt 

1
投票

正在考虑字符串匹配:

gci * -R | ? { $_.FullName -like '*\even\src\*.foobar.txt' }

© www.soinside.com 2019 - 2024. All rights reserved.