Group-By: como agrupar objetos de diversas formas no Windows Powershell

Respondi hoje uma pergunta legal: como saber quantos e quais são os tipos de arquivo que se tem em um diretório?

A resposta, que daria um trabalho considerável usando VBScript e WSH, com o Powershell fica brincadeira de criança:

get-childItem | group-object {$_.extension}
ls | group {$_.extension}

Se quiser excluir ainda os diretórios (special thanks to Jeffrey Snover, Powershell Architect)

ls | where {-not $_.PSIsContainer} | group {$_.extension}

Count Name Group
----- ---- -----
1 .rar {Motorola v191.rar}
2 .bak {Untitled0_MAS.bak, Untitled2_MAS.bak}

Mas as linhas acima ainda não resolveram o problema do usuário. Então acabei descobrindo outras formas de exibir a saída do Powershell.

$ofs = "`n"
$a = ls | where {-not $_.PSIscontainer} | Group-Object {$_.extension}
$a | foreach {
"Tipo: " + $_.name
"Quantidade: " + $_.count
"Arquivos:`n" + $_.group
"----------"
}

E a saída foi:

Tipo: .rar
Quantidade: 1
Arquivos:
Motorola v191.rar
----------
Tipo: .bak
Quantidade: 2
Arquivos:
Untitled0_MAS.bak
Untitled2_MAS.bak
----------

Além dessas, ainda tem outra opção:

ls | where {-not $_.PSIsContainer} | ft name -groupby {$_.extension}

Que tem como saída

$_.extension: .rar

Name
----
Motorola v191.rar

$_.extension: .bak

Name
----
Untitled0_MAS.bak
Untitled2_MAS.bak

Bom, deve ter como fazer isso ainda de outras N formas... só listei as mais práticas, que podem resolver o problema em alguns casos.

Vale lembrar um detalhe: se precisar que isso seja colocado em um arquivo, basta colocar um >> arquivo.txt no final das linhas de comando... esse é o redirecionamento de saída.

 

Até mais!

Categorias dessa postagem:

Comentários

Anônimo : Olá,
Muito bacana seu post ... caso eu queira examinar um volume inteiro como fazer para ele varrer dentro de todas as subpastas deste volume????

valeu [16/1/07 10:13 - link]

Vinicius Canto : É fácil. Basta adicionar -Recurse ao comando ls:

ls -recurse | bla bla bla... o resto continua o mesmo.

[]s,

V. Canto [16/1/07 22:31 - link]