Obtener el tamaño total de un directorio en Linux

Este artículo cubre la utilidad du Linux/Unix para obtener el tamaño de un directorio. Exploraremos su comportamiento y opciones, e incluso lo usaremos con la utilidad de árbol.

Introducción

En Linux, ls -l listaría los archivos y directorios en una ruta particular, con sus nombres, fechas y tamaños (uso del disco). Lo primero que notará al usar ese comando es que el tamaño de los directorios siempre se muestra como 4096 bytes (o 4,0K si está usando ls -lh) aunque contengan archivos de más de 4 KB de tamaño. La razón es que ls devuelve metadatos para los directorios, no el tamaño real.

Entonces, ¿cuál es la forma más corta y fácil de obtener el tamaño de un directorio en Linux? Para obtener el tamaño total de un directorio en Linux, puede usar el comando du (disk-usage).

En este artículo, veremos algunos de los usos más comunes de los comandos du, incluidos, entre otros, du -sh, du -ch y du --max- depth .

Obtener el tamaño del directorio en Linux con du

Para ver la descripción completa y la lista de argumentos del comando du, consulte el man du.

Si escribimos du sin ningún argumento, enumerará todos los nombres y tamaños de directorio para el directorio de trabajo actual y todos los subdirectorios de forma recursiva:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
rus:~/nltk_data$ du
2156    ./corpora/state_union
64  ./corpora/names
7624    ./corpora/conll2002
432 ./corpora/toolbox/rotokas
### ...
246984  ./corpora
16792   ./tokenizers/punkt/PY3
36028   ./tokenizers/punkt
49420   ./tokenizers
296408  .

Obtener el tamaño del directorio de trabajo actual

Para obtener el tamaño del directorio de trabajo actual únicamente, y no los subdirectorios, podemos usar du -s o du --summarize:

1
2
rus:~/nltk_data$ du -s
296408  .

Podemos agregar el parámetro -h para obtener el tamaño en un formato más legible por humanos:

1
2
rus:~/nltk_data$ du -sh
290M    .

También podemos usar du con el parámetro $PATH para obtener el tamaño de un directorio que se encuentra en otro lugar que no sea el directorio de trabajo actual:

1
2
rus:~/nltk_data$ sudo du /var -sh # or "du -sh /var" if you prefer
11G /var

Tenga en cuenta que necesitará usarlo con privilegios sudo para algunos directorios, de lo contrario, obtendrá un error Permiso denegado.

Obtener el tamaño de los subdirectorios de primer nivel

Para obtener el tamaño de los subdirectorios de primer nivel, así como el tamaño total del directorio de ruta:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
rus:~$ sudo du /var/* -shc
6,1M    /var/backups
144M    /var/cache
4,0K    /var/crash
7,2G    /var/lib
4,0K    /var/local
0   /var/lock
3,0G    /var/log
4,0K    /var/mail
4,0K    /var/metrics
4,0K    /var/opt
0   /var/run
3,8M    /var/snap
52K /var/spool
72K /var/tmp
28K /var/www
11G total

-c o --total devuelve el tamaño total de la ruta (11G total). * enumera todos los subdirectorios de primer nivel en el directorio /var/. También podemos agregar --exclude para excluir cualquier directorio:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
rus:~$ sudo du /var/* -shc --exclude=lib
6,1M    /var/backups
144M    /var/cache
4,0K    /var/crash
4,0K    /var/local
0   /var/lock
3,0G    /var/log
4,0K    /var/mail
4,0K    /var/metrics
4,0K    /var/opt
0   /var/run
3,8M    /var/snap
52K /var/spool
72K /var/tmp
28K /var/www
3,2G    total

Tenga en cuenta que excluir lib también afecta el tamaño total (3,2G total). Esto también es equivalente a sudo du /var/ -h --exclude=lib --max- depth=1

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
rus:~$ sudo du /var/ -h --exclude=lib --max-depth=1
4,0K    /var/mail
52K /var/spool
3,8M    /var/snap
4,0K    /var/metrics
144M    /var/cache
6,1M    /var/backups
72K /var/tmp
4,0K    /var/crash
3,0G    /var/log
4,0K    /var/opt
28K /var/www
4,0K    /var/local
3,2G    /var/

--max- depth=N devolverá todos los niveles de subdirectorio que sean iguales o menores que el número N. Establecer --max- depth en 1 devuelve el primer nivel, 2 para el segundo, y así sucesivamente.

Obtener el tamaño de todos los subdirectorios

Para obtener recursivamente todos los subdirectorios de /var/, puede usar sudo du /var/ -h. O puede pasar un número a --max-depth que esté seguro de que es mayor o igual que el nivel máximo de profundidad del subdirectorio: sudo du /var/ -h --max- depth= 999.

La segunda opción es más una solución alternativa que la forma más eficiente.

Obtenga el tamaño del directorio en Linux con tree --du -h

tree es un programa de listado de directorios recursivo que listará directorios y archivos en un formato similar a un árbol. Tenga en cuenta que tree no está instalado de forma predeterminada. Para Debian/Ubuntu, podemos instalar el árbol ejecutando sudo apt install tree.

Después de completar la instalación, usamos el comando tree para enumerar los nombres y tamaños de todos los directorios y archivos en una ruta particular, en un formato similar a un árbol:

1
2
3
4
5
6
7
8
rus:~$ tree /var/www/ --du -h
/var/www/
├── [4.2K]  demosite
   └── [ 189]  index.html
└── [ 15K]  html
    └── [ 11K]  index.html

  23K used in 2 directories, 2 files

Conclusión

En este artículo, aprendimos cómo obtener tamaños de directorios en Linux. Puede usar estos comandos en máquinas remotas Linux, servidores y/o máquinas Linux con o sin GUI.

Para la mayoría de los casos, el comando du sería suficiente. También tiene la ventaja de ser instalado por defecto. Por otro lado, el comando tree proporcionaría una interfaz de usuario más visual y detallada para mostrar casi los mismos resultados, lo que lo convierte en una poderosa alternativa para du.