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


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

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

Pero quiero tener solo el tamaño resumido de cada directorio dentro de la carpeta ROOT del sistema de archivos. ¿Hay algún comando para lograr eso?


258


origen


los --total bandera fue útil para mí. P.ej. du -sh --total applications/*. askubuntu.com/a/465436/48214 - Ryan


Respuestas:


Esto hace lo que estás buscando:

du -sh /*

Lo que esto significa:

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

    Nota: los archivos punto no están incluidos; correr shopt -s dotglob para incluir esos también.

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

du -sh /* | sort -h

Aquí:

  • -h asegura que sort interpreta los sufijos legibles por humanos correctamente.

366



Si tiene directorios de puntos en el directorio raíz, puede usar shopt -s dotglob para incluirlos en el conteo. - Philipp
Es muy útil, porque es simple y puede colocar la ruta que desee en lugar de /*, p.ej. ./ para el directorio actual o ./* para cada elemento en el directorio actual. - psur
@psur o puede usar ./*/ para obtener solo subcarpetas y no todos los elementos - relascope
Versión ordenada: du -sh /* | sort -h - Vu Anh
@ c1phr si su sort no tiene -h, debes dejarlo fuera de du también, de lo contrario la clasificación se mezclará en kilo / mega / gigabytes. du -s /* | sort -nr. - Thomas


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

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

En este caso, los tamaños se informarán en megabytes.


70



Aquí hay una manera de hacerlo más legible du -sh / some / path | ordenar -hr | cabeza -n 20 - Xedecimal
@Xedecima el problema con el uso de h es que el género no sabe cómo manejar diferentes tamaños. Por ejemplo, 268K se clasifica por encima de 255M, y ambos se clasifican por encima de 2,7G - chrisan
El argumento -h (legible por humanos) en el comando 'ordenar' debería leer correctamente estos valores. Al igual que du's -h flag los exporta. Dependiendo de lo que estés ejecutando, supongo. - Xedecimal
Funciona en Ubuntu 16.04. Buen consejo. - SDsolar


Me gusta usar Ncdu para eso, puede usar el cursor para navegar y profundizar en la estructura del directorio, funciona muy bien.


14





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

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

    for each in $(ls) ; do du -hs "$each" ; done
    
  2. Muy similar a la primera respuesta y casi el mismo resultado que 1.), pero me tomó algo de tiempo entender la diferencia de * a ./* si en un subdirectorio:

    du -sh ./*
    

9





El seguimiento du la invocación debería funcionar en los sistemas BSD:

du -d 1 /

6



Mi du (Ubuntu 10.4) no tiene una -d opción. ¿En qué sistema estás? - Thomas
En mi openSUSE no tiene una opción -d tampoco :( - 2ndkauboy
OK, entonces es solo una opción de BSD (estoy en OS X). - Philipp
La combinación de opción portátil derecha en BSD / * NIX es du -sk /*. Odio el -k cosas tan mucho. Linux -h totalmente rocas. - Dummy00001
en otros sistemas, es --max-depth - Vishnu Kumar


Esto no es fácil los du comando muestra los archivos y las carpetas (predeterminado) o solo los tamaños de todos los elementos que especifique en la línea de comando (opción -s)

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

du -h | sort -h

Esto lo 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 las carpetas de puntos ocultas (carpetas que comienzan con .)

Si realmente quieres las carpetas, debes usar find pero esto puede ser muy, muy lento desde du tendrá que escanear muchas carpetas varias veces:

find . -type d -print0 | sort -z | xargs --null -I '{}' du -sh '{}' | sort -h

3



--threshold ^^^ esta opción no está disponible en Linux - podarok
@podarok Está disponible en OpenSUSE 13.2 Linux. Intente encontrar una versión más reciente de su distribución o compile una versión más reciente del paquete usted mismo. - Aaron Digulla
No funciona en Ubuntu LTS (14.04). Es el más reciente)) - podarok
@podarok ¿Qué versión de coreutils de GNU? El mío es 8.24. - Aaron Digulla
El almacenamiento en caché podría haber sido un mal término. Estaba pensando en algo así como lo hice en este puerto superuser.com/a/597173/121352 donde escaneamos el contenido de los discos una vez en un mapeo y luego continuamos usando los datos de ese mapeo en lugar de volver a golpear el disco. - Hennes


Tenga en cuenta que no puede comparar directorios con du en diferentes sistemas / máquinas sin estar seguros, ambos comparten el mismo tamaño de bloques del sistema de archivos. Esto podría contar si sincroniza algunos archivos de una máquina Linux a una NAS y desea comparar el directorio sincronizado por su cuenta. Puede obtener diferentes resultados con du debido a diferentes bloqueos ...


1





Es posible que también desee retirar xdiskusage. Le dará la misma información, pero se muestra gráficamente y además permite profundizar (muy útil). Hay otras utilidades similares para KDE e incluso Windows.


0





Podrías usar ls junto con awk:

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

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

Si convierte esto en un script o función (.bashrc) también puede usarlo para obtener el tamaño de ciertos subconjuntos de directorios, de acuerdo con los tipos de archivos.

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


0



Estoy de acuerdo en que se puede ampliar este ejemplo y hacer trucos como obtener el tamaño de "ciertos subconjuntos de directorios, de acuerdo con los tipos de archivos", etc .; puede parecer un buen punto de partida. Sin embargo, esta solución es defectuosa desde el principio. Para cada usuario que quiera utilizar este método, recomiendo leer respuestas y comentarios a esta pregunta así como el artículo vinculado allí. No digo que no puedas hacerlo en absoluto. Conozca las limitaciones, eso es todo. - Kamil Maciorowski