Me gustaría ver los tamaños de las subcarpetas en una carpeta, similar al du -sh
comando de Linux. ¿Cómo puedo enumerar directorios y sus tamaños en el símbolo del sistema?
Respuesta1
Prueba elUso del discoutilidad de Sysinternals. Específicamente, du -l 1
debería mostrar el tamaño de cada subdirectorio del directorio actual. Para obtener más información, ejecute du
sin ningún parámetro.
Si PowerShell está bien, intente lo siguiente:
Get-ChildItem |
Where-Object { $_.PSIsContainer } |
ForEach-Object {
$_.Name + ": " + (
Get-ChildItem $_ -Recurse |
Measure-Object Length -Sum -ErrorAction SilentlyContinue
).Sum
}
Los tamaños están en bytes. Para formatearlos en alguna unidad más grande como MB, intente lo siguiente (condensado en una línea):
Get-ChildItem | Where-Object { $_.PSIsContainer } | ForEach-Object { $_.Name + ": " + "{0:N2}" -f ((Get-ChildItem $_ -Recurse | Measure-Object Length -Sum -ErrorAction SilentlyContinue).Sum / 1MB) + " MB" }
Para más información, vereste artículo en Technet.
Si desea un formato más flexible de los tamaños (eligiendo kB/MB/GB/etc según el tamaño real), consulteesta pregunta y sus respuestas.
No creo que sea posible hacer lo que quieres desde la línea de comandos normal y con sólo unos pocos comandos simples. Vereste script como ejemplo(No lo copiaré aquí porque no creo que valga la pena seguir ese enfoque, a menos que PowerShell no esté disponible y las utilidades de terceros no sean aceptables).
Respuesta2
No tengo experiencia con du
Linux. Pero en Windows suelo dir /s
enumerar todas las carpetas y subcarpetas junto con los tamaños de los archivos.
Respuesta3
Esta es una modificación deLa respuesta de Indrek.. Agregué lo siguiente:
- lo hizo recursivo para ir más lejos en los subdirectorios
- Se agregó un umbral de tamaño para omitir directorios más pequeños.
- reemplazó los nombres de los directorios con su ruta relativa desde el directorio actual
- resultados ordenados por su ruta (me pareció más conveniente en lugar de ordenarlos por tamaño, cuando ya están filtrados por tamaño)
- Se agregó algo de formato para que los resultados sean más legibles.
Entonces, configure $minsizeMB
y $maxdepth
con los valores deseados y ejecute el 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) }
}