web-dev-qa-db-fra.com

Comment trouver des fichiers dans des répertoires avec un certain nom en utilisant Get-ChildItem?

J'ai un dossier de projet appelé topfolder et je veux trouver tous les fichiers dans tous les sous-dossiers qui correspondent à un certain modèle, par exemple lorsque le dossier contient foo n'importe où dans son nom, je veux lister tous les fichiers qu'il contient.

J'ai essayé quelque chose comme:

gci .\topfolder -rec -filter *foo*

mais il a deux problèmes:

  1. Seuls les fichiers contenant réellement foo seront répertoriés (je veux tout fichier dans le dossier foo-like).
  2. Les répertoires correspondant à ce filtre feront également partie de l'ensemble de résultats.

Ensuite, j'ai essayé ceci:

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

mais cela ne fonctionne pas du tout - apparemment, les caractères génériques ne correspondent qu'à un seul segment d'un chemin, de sorte que le modèle correspondra à topfolder\foobar mais non topfolder\subfolder\foobar.

La seule façon que j'ai trouvée jusqu'à présent était d'utiliser deux fois Get-ChildItem, comme ceci:

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

Cela fonctionne, mais il semble inutile d'appeler gci deux fois et j'espère que je n'ai tout simplement pas trouvé une expression générique correcte pour quelque chose comme -Path, -Filter ou -Include.

Quelle est la meilleure façon de le faire?

19
Borek Bernard

J'utiliserais le paramètre Filter au lieu de Include, il effectue beaucoup plus gras

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