Как найти файлы в каталогах с определенным именем с помощью Get-ChildItem?

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

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

gci .\topfolder -rec -filter *foo*

, но у него есть две проблемы:

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

Затем я попробовал это:

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

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

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

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

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

Как лучше всего это сделать?

18
задан Borek Bernard 3 April 2012 в 14:10
поделиться