powershell select-string com recursão ao arquivo específico

3

Tenho certeza de que o select-string de Powershell funcionará para mim com um pouco de recursão Get-ChildItem.

Eu tenho muitos diretórios como este:

abc_123
abc_345
abc_567
abc_890
abc_111
abc_569

Em cada diretório, há um arquivo específico com o mesmo caminho para cada arquivo em cada diretório:

abc_123:\AAA\SDK\Settings\foo.settings.xml
abc_345:\AAA\SDK\Settings\foo.settings.xml
abc_567:\AAA\SDK\Settings\foo.settings.xml

E assim por diante.

Dentro do arquivo foo.settings.xml, quero procurar por "BAR". e também uma linha abaixo:

  <name="BAR.ABB"
            default="1"

O problema que estou tendo é dentro do diretório que tem abc_123, abc_345, abc_567, etc, há outros diretórios que também contêm BAR. *. Eu não me importo com esses resultados.

Estou tentando algo assim, mas não está funcionando.

Get-ChildItem -Recurse *.* | Select-String -Pattern "BAR.*" foo.settings.xml | Select-Object -Unique Path

Onde no meu comando posso especificar que eu só quero procurar diretórios começando com abc_ e naquele caminho específico?

--- editar ---

O caminho sempre começa abc_ * e o foo.settings.xml sempre tem este caminho: abc_*:\AAA\SDK\Settings\foo.settings.xml

Eu tentei isso: Get-ChildItem -Recurse | Where-Object {"abc_*"} | Select-String –Pattern "BAR.*" , mas isso parece dar os mesmos resultados acima.

    
por Registered User 04.10.2016 / 01:59

1 resposta

2

Na sua linha Get-ChildItem -Recurse *.* , você está especificando que deseja todos os arquivos com qualquer extensão, porque *.* está vinculado ao parâmetro -Filter .

Para obter todos os arquivos começando com o caminho abc_ * e sempre com o mesmo caminho relativo, você pode fazer algo parecido com isto: Get-ChildItem -Recurse | Where-Object {$_.FullName -like 'abc_*:\AAA\SDK\Settings\foo.settings.xml'} | Select-String ...

No entanto, dado que cada arquivo foo.settings.xml está no mesmo diretório relativo, isso parece relativamente ineficiente, assumindo um grande número de subdiretórios em cada abc_* dir. Uma solução melhor neste caso seria algo como:

(onde $ Path é o caminho da raiz para o local com todos os diretórios abc_ *)

Get-ChildItem $Path -Filter abc_* | Foreach-Object {Select-String -Path "$($_.FullName)\AAA\SDK\Settings\foo.settings.xml" -Pattern "BAR.*"}

    
por 04.10.2016 / 02:08