Powershell:Get-ChildItem 路径中的多个通配符
Powershell: multiple wildcards in Get-ChildItem path
我正在尝试在 powershell 中使用 Get-ChildItem
(我使用的是 ls
别名)以 return 仅特定文件夹结构中的文件。
举个例子,假设我要列出名称以 .foobar.txt
结尾且位于名为 src
的文件夹中的所有文件,而该文件夹又位于名为 [=17] 的文件夹中=].我试过使用命令 ls -r *\even\src\*.foobar.txt | % FullName
。我认为路径中的第一个通配符 *
将允许以 \even\src\
结尾的任何路径,而第二个通配符将仅匹配以 .foobar.txt
结尾的文件。但它并没有 returning 我期望的所有文件。这是我在其中测试它的目录结构:
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
文件夹中找到文件?
将其分为 2 个步骤。首先递归所有目录,过滤掉你想要的目录,然后通过另一个 get-childitem
过滤掉你想要的文件名的结果:
ls -Recurse -Directory | where {$_.FullName -like "*\even\src"} | ls -filter *.foobar.txt
正在考虑字符串匹配:
gci * -R | ? { $_.FullName -like '*\even\src\*.foobar.txt' }
我正在尝试在 powershell 中使用 Get-ChildItem
(我使用的是 ls
别名)以 return 仅特定文件夹结构中的文件。
举个例子,假设我要列出名称以 .foobar.txt
结尾且位于名为 src
的文件夹中的所有文件,而该文件夹又位于名为 [=17] 的文件夹中=].我试过使用命令 ls -r *\even\src\*.foobar.txt | % FullName
。我认为路径中的第一个通配符 *
将允许以 \even\src\
结尾的任何路径,而第二个通配符将仅匹配以 .foobar.txt
结尾的文件。但它并没有 returning 我期望的所有文件。这是我在其中测试它的目录结构:
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
文件夹中找到文件?
将其分为 2 个步骤。首先递归所有目录,过滤掉你想要的目录,然后通过另一个 get-childitem
过滤掉你想要的文件名的结果:
ls -Recurse -Directory | where {$_.FullName -like "*\even\src"} | ls -filter *.foobar.txt
正在考虑字符串匹配:
gci * -R | ? { $_.FullName -like '*\even\src\*.foobar.txt' }