363 votos

¿Cómo obtener los tamaños resumidos de las carpetas y sus subcarpetas?

Digamos que quiero obtener el tamaño de cada carpeta de un sistema de archivos de linux. Cuando uso ls -la No entiendo el tamaño resumido de las carpetas.

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

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

1 votos

El --total flag me fue útil. Por ejemplo du -sh --total applications/* . askubuntu.com/a/465436/48214

526voto

draikin4321 Puntos 6

Esto hace lo que buscas:

du -sh /*

Lo que esto significa:

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

    Nota: los archivos de puntos no están incluidos; ejecute shopt -s dotglob para incluirlos también.

También es útil la clasificación por tamaños:

du -sh /* | sort -h

Aquí:

  • -h garantiza que sort interpreta correctamente los sufijos de lectura humana.

9 votos

Si tiene directorios de puntos en el directorio root, puede utilizar shopt -s dotglob para incluirlos en el recuento.

12 votos

Es muy útil, porque es sencillo y puedes colocar el camino que quieras en lugar de /* Por ejemplo ./ para el directorio actual o ./* para cada elemento del directorio actual.

4 votos

@psur o puede utilizar ./*/ para obtener sólo las subcarpetas y no todos los elementos

89voto

Janne Pikkarainen Puntos 4741

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 se informarán en megabytes.

15 votos

Aquí hay una manera de conseguir que sea más legible du -sh /some/path | sort -hr | head -n 20

7 votos

@Xedecima el problema con el uso de h es que el sort no sabe cómo manejar diferentes tamaños. Por ejemplo 268K se ordena más que 255M, y ambos se ordenan más que 2.7G

5 votos

El argumento -h (human readable) del comando 'sort' debería leer correctamente estos valores. Al igual que la flag -h de du los exporta. Dependiendo de lo que estés ejecutando, supongo.

14voto

tiste Puntos 21

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

  1. Un bucle muy básico, pero para mí fue un buen comienzo para algunas 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 la 1.), pero me tomó algún tiempo para entender la diferencia de * a ./* si en un subdirectorio:

    du -sh ./*

0 votos

for each no funciona porque añade los caracteres de la consola (por ejemplo \033[ ) a la lista de carpetas

0 votos

@machineaddict no estoy seguro de lo que quieres decir. Yo uso esto todo el tiempo, funciona para mí muy bien.

0 votos

intente ejecutar su comando comenzando con for each . no funcionará

9voto

Haakon Puntos 1119

Lo siguiente du debería funcionar en sistemas BSD:

du -d 1 /

2 votos

Mi du (Ubuntu 10.4) no tiene un -d opción. ¿En qué sistema estás?

1 votos

En mi openSUSE tampoco tiene la opción -d :(

1 votos

OK, entonces es una opción de BSD solamente (estoy en OS X).

5voto

becko Puntos 114

Esto no es fácil. El du muestra los archivos y las 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 pequeños archivos. 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 ocultos (carpetas que empiezan por . ).

Si realmente sólo quieres las carpetas, tienes que 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 votos

--threshold ^^ esta opción no está disponible en linux

2 votos

@podarok Está disponible en OpenSUSE 13.2 Linux. Intenta encontrar una versión más reciente de tu distribución o compila tú mismo una versión más reciente del paquete.

1 votos

No funciona en Ubuntu LTS (14.04). Es el más reciente ))

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X