![Como posso listar diretórios e seus tamanhos no prompt de comando?](https://rvso.com/image/1331441/Como%20posso%20listar%20diret%C3%B3rios%20e%20seus%20tamanhos%20no%20prompt%20de%20comando%3F.png)
Gostaria de ver os tamanhos das subpastas em uma pasta, semelhante ao du -sh
comando do Linux. Como posso listar diretórios e seus tamanhos no prompt de comando?
Responder1
Tente oUso de discoutilitário da Sysinternals. Especificamente, du -l 1
deve mostrar o tamanho de cada subdiretório do diretório atual. Para obter mais informações, execute du
sem nenhum parâmetro.
Se o PowerShell estiver OK, tente o seguinte:
Get-ChildItem |
Where-Object { $_.PSIsContainer } |
ForEach-Object {
$_.Name + ": " + (
Get-ChildItem $_ -Recurse |
Measure-Object Length -Sum -ErrorAction SilentlyContinue
).Sum
}
Os tamanhos estão em bytes. Para formatá-los em alguma unidade maior como MB, tente o seguinte (condensado em uma linha):
Get-ChildItem | Where-Object { $_.PSIsContainer } | ForEach-Object { $_.Name + ": " + "{0:N2}" -f ((Get-ChildItem $_ -Recurse | Measure-Object Length -Sum -ErrorAction SilentlyContinue).Sum / 1MB) + " MB" }
Para mais informações, vejaeste artigo na Technet.
Se você quiser uma formatação mais flexível dos tamanhos (escolhendo kB/MB/GB/etc com base no tamanho real), consulteesta pergunta e suas respostas.
Não acho que seja possível fazer o que você deseja na linha de comando normal e com apenas alguns comandos simples. Vereste script como exemplo(não vou copiá-lo aqui porque não acredito que valha a pena seguir essa abordagem, a menos que o PowerShell não esteja disponível e utilitários de terceiros não sejam aceitáveis).
Responder2
Não tenho experiência du
em Linux. Mas no Windows eu uso dir /s
para listar todas as pastas e subpastas junto com os tamanhos dos arquivos.
Responder3
Esta é uma modificaçãoA resposta de Indrek. Eu adicionei o seguinte:
- tornou recursivo ir mais longe nos subdiretórios
- adicionou um limite de tamanho para omitir diretórios menores
- substituiu os nomes dos diretórios pelo caminho relativo do diretório atual
- classificou os resultados por caminho (achei mais conveniente do que classificá-los por tamanho, quando já estão filtrados por tamanho)
- adicionou alguma formatação para tornar os resultados mais legíveis
Portanto, defina $minsizeMB
e $maxdepth
com os valores desejados e execute o script.
$minsizeMB = 100;
$maxdepth = 5;
Get-ChildItem -depth $maxdepth -Recurse |
Where-Object { $_.PSIsContainer } |
Select-Object FullName |
Sort-Object FullName |
ForEach-Object {
$directory = Get-Item $_.FullName;
$path = Resolve-Path -Relative $directory.FullName ;
$size = ((Get-ChildItem $directory -Recurse | Measure-Object Length -Sum -ErrorAction SilentlyContinue).Sum / 1MB) ;
if ($size -ge $minsizeMB) { "{0,-90}: {1:N2} MB" -f ($path, $size) }
}