Как найти файлы в каталогах с определенным именем, используя Get-ChildItem? - PullRequest
17 голосов
/ 03 апреля 2012

У меня есть папка проекта с именем topfolder, и я хочу найти все файлы во всех подпапках, которые соответствуют определенному шаблону, например, когда папка содержит foo в любом месте своего имени, я хочу перечислить все файлы внутри нее.

Я пробовал что-то вроде:

gci .\topfolder -rec -filter *foo*

но у него две проблемы:

  1. Будут перечислены только те файлы, которые действительно содержат foo (я хочу любой файл в foo-подобной папке).
  2. Каталоги, соответствующие этому фильтру, также будут частью набора результатов.

Тогда я попробовал это:

gci .\topfolder\*foo* -include *.*

, но это совсем не работает - очевидно, подстановочные знаки соответствуют только одному сегменту пути, поэтому шаблон будет соответствовать topfolder\foobar, но не topfolder\subfolder\foobar.

Единственный способ, который я нашел до сих пор, - это дважды использовать Get-ChildItem, например:

gci .\topfolder -rec -include *foo* | where { $_.psiscontainer } | gci

Это работает, но, кажется, напрасно звонить gci дважды, и я надеюсь, что я просто не нашел правильное подстановочное выражение для чего-то вроде -Path, -Filter или -Include.

Каков наилучший способ сделать это?

1 Ответ

19 голосов
/ 03 апреля 2012

Я бы использовал параметр Filter вместо Include, он гораздо жирнее

gci .\topfolder -rec -filter *foo* | where { $_.psiscontainer } | gci
...