2012-04-03 3 views
16

Tengo una carpeta de proyecto llamada topfolder y quiero encontrar todos los archivos en todas las subcarpetas que coinciden con un patrón determinado, p. cuando la carpeta contiene foo en cualquier lugar de su nombre, quiero enumerar todos los archivos que contiene.¿Cómo encontrar archivos en directorios con cierto nombre utilizando Get-ChildItem?

He intentado algo así como:

gci .\topfolder -rec -filter *foo* 

pero tiene dos problemas:

  1. Sólo los archivos que contiene realmente foo se listarán (Quiero cualquier archivo en la carpeta foo-like).
  2. Los directorios que coincidan con este filtro también formarán parte del conjunto de resultados.

Luego probé esto:

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

pero que no funciona en absoluto - al parecer comodines de coincidencia solo un segmento de un trazado de manera que el patrón coincidirá topfolder\foobar pero no topfolder\subfolder\foobar.

La única forma que he encontrado hasta ahora era utilizar Get-ChildItem dos veces, como esta:

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

Esto funciona, pero parece una pérdida de llamar gci dos veces y espero simplemente didn' t encuentra una expresión de comodín derecha para algo como -Path, -Filter o -Include.

¿Cuál es la mejor manera de hacerlo?

Respuesta

18

me gustaría utilizar el parámetro de filtro en lugar de incluir, se realiza mucho fatser

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

¿Cómo es diferente de mi último ejemplo? ¿No será incluso más lento que mi intento? – Borek

+0

Lo siento, debo haber estado ciego;) –

+0

Acabo de publicar una respuesta actualizada –

Cuestiones relacionadas