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!
Comentários
Postar um comentário
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]