2010-07-11 17:26:29 +0000 2010-07-11 17:26:29 +0000
316
316

¿Cómo obtener los tamaños resumidos de los directorios y sus subdirectorios?

Digamos que quiero obtener el tamaño de cada directorio de un sistema de archivos de Linux. Cuando uso ls -la no obtengo realmente el tamaño resumido de los directorios.

Si uso df obtengo el tamaño de cada sistema de archivos montado pero eso tampoco me ayuda. Y con du obtengo el tamaño de cada subdirectorio y el resumen de todo el sistema de archivos.

Pero quiero tener sólo el tamaño resumido de cada directorio dentro de la carpeta Raíz del sistema de archivos. ¿Hay algún comando para lograr eso?

Respuestas (9)

450
450
450
2010-07-11 17:28:23 +0000

Esto hace lo que buscas:

du -sh /*

Lo que esto significa:

  • -s para dar sólo el total de cada argumento de línea de comandos.
  • -h para sufijos legibles para los humanos como M para megabytes y G para gigabytes (opcional).
  • /* simplemente se expande a todos los directorios (y archivos) en /.

También es útil ordenar por tamaño:

du -sh /* | sort -h

Aquí:

  • -h asegura que sort interpreta correctamente los sufijos legibles por humanos.
84
84
84
2010-07-29 12:07:31 +0000

A menudo necesito encontrar los directorios más grandes, así que para obtener una lista ordenada que contenga los 20 dirs más grandes hago esto:

du -m /some/path | sort -nr | head -n 20

En este caso los tamaños serán reportados en megabytes.

24
24
24
2015-12-24 10:07:52 +0000

Me gusta usar Ncdu para eso, puedes usar el cursor para navegar y desglosar la estructura de directorios, funciona muy bien.

12
12
12
2012-11-22 16:53:04 +0000

Las respuestas existentes son muy útiles, tal vez algún principiante (como yo) también lo encuentre útil.

  1. Un bucle muy básico, pero para mí fue un buen comienzo para algunas otras operaciones relacionadas con el tamaño:

  2. Muy similar a la primera respuesta y casi el mismo resultado que 1.), pero me llevó algún tiempo entender la diferencia de * a ./* si en un subdirectorio:

9
9
9
2010-07-11 17:29:10 +0000

La siguiente invocación du debería funcionar en los sistemas BSD:

du -d 1 /
5
5
5
2015-07-24 11:04:13 +0000

Esto no es fácil. El comando du muestra los archivos y carpetas (por defecto) o sólo los tamaños de todos los elementos que se especifican en la línea de comandos (opción -s).

Para obtener los elementos más grandes (archivos y carpetas), ordenados, con tamaños legibles para el ser humano en Linux:

du -h | sort -h

Esto te enterrará en una tonelada de archivos pequeños. Puedes deshacerte de ellos con --threshold (1 MB en mi ejemplo):

du --threshold=1M -h | sort -h

La ventaja de este comando es que incluye carpetas de puntos ocultos (carpetas que comienzan con .).

Si realmente sólo quieres las carpetas, necesitas usar find pero esto puede ser muy, muy lento ya que du tendrá que escanear muchas carpetas varias veces:

find . -type d -print0 | sort -z | xargs --null -I '{}' du -sh '{}' | sort -h
2
2
2
2013-10-05 15:36:58 +0000

Ten en cuenta que no puedes comparar directorios con du en diferentes sistemas/máquinas sin estar seguro, ambos comparten el mismo tamaño de bloqueo del sistema de archivos. Esto podría contar si sincronizas algunos archivos de una máquina de linux a una nas y quieres comparar el directorio sincronizado por tu cuenta. Podrías obtener resultados diferentes con du debido a los diferentes tamaños de bloque…

1
1
1
2010-07-12 19:42:17 +0000

Tal vez también quieras revisar xdiskusage . Te dará la misma información, pero mostrada gráficamente, además permite hacer un drill down (muy útil). Hay otras utilidades similares para KDE e incluso para Windows.

1
1
1
2016-12-20 09:56:34 +0000

Podrías usar ls en conjunción con awk:

ls -al * | awk 'BEGIN {tot=0;} {tot = tot + $5;} END {printf ("%.2fMb\n",tot/1024/1024);}'

La salida de ls se canaliza hacia awk. awk comienza a procesar los datos. El delimitador estándar es el espacio. La variable de suma tot se inicializa a cero; la siguiente declaración se ejecuta para cada fila/línea emitida por ls. Simplemente incrementa tot con el tamaño. $5 representa la quinta columna (emitida por ls). Al final dividimos por (1024*1024) para sumar en megabytes.

Si quieres convertir esto en un script o función (.bashrc) también puedes usarlo para obtener el tamaño de ciertos subconjuntos de directorios, según los tipos de archivo.

Si quieres información de todo el sistema, kdirstat puede ser útil!