Aquí hay muchas respuestas, muchas de las cuales son duplicadas. Veo tres tendencias: pasar por una segunda llamada du, usar código shell / awk complicado y usar otros idiomas.
Aquí hay una solución compatible con POSIX que utiliza du y awk que debería funcionar en todos los sistemas.
He adoptado un enfoque ligeramente diferente, agregando -x
para garantizar que permanezcamos en el mismo sistema de archivos (solo necesito esta operación cuando tengo poco espacio en disco, entonces, ¿por qué eliminar cosas que he montado dentro de este árbol FS o movido y enlace simbólico?) y muestra unidades constantes para facilitar el análisis visual. En este caso, normalmente elijo no ordenar para poder ver mejor la estructura jerárquica.
sudo du -x | awk '
$1 > 2^20 { s=$1; $1=""; printf "%7sG%s\n", sprintf("%.2f",s/2^21), $0 }'
(Dado que esto está en unidades consistentes, puede agregar | sort -n
si realmente desea ordenar los resultados).
Esto filtra cualquier directorio cuyo contenido (acumulativo) no supere los 512 MB y luego muestre los tamaños en gigabytes. Por defecto, du usa un tamaño de bloque de 512 bytes (por lo que la condición de awk de 2 20 bloques es de 512 MB y su divisor de 2 21 convierte las unidades a GB; podríamos usar du -kx
con $1 > 512*1024
y s/1024^2
para que sea más legible para los humanos). Dentro de la condición awk, establecemos s
el tamaño para que podamos eliminarlo de la línea ( $0
). Esto retiene el delimitador (que se contrae en un solo espacio), por lo que el final %s
representa un espacio y luego el nombre del directorio agregado. %7s
alinea el %.2f
tamaño de GB redondeado (aumente a %8s
si tiene> 10 TB).
A diferencia de la mayoría de las soluciones aquí, esto admite correctamente directorios con espacios en sus nombres (aunque cada solución, incluida esta, manejará mal los nombres de directorio que contienen saltos de línea).