Mostrar cada tamaño de subdirectorio en un formato de lista utilizando un comando de línea en Bash?

101

Quiero obtener una lista de los directorios y sus tamaños en un formato de lista, como cómo se obtiene cuando se hace un ls -l.

La cuestión es que ¿hay un comando de una línea que pueda hacer esto? Veo que otros tienen comandos largos solo para mostrar esto. Eso es demasiado tiempo.

¿Qué comando puede hacer esto o una combinación de comandos que se puedan escribir fácilmente? du -hlo da, pero muestra todas las subcarpetas, que no es lo que quiero. solo las carpetas de directorios actuales.

Patoshi パ ト シ
fuente

Respuestas:

72

Probablemente quiera ver los directorios ordenados por tamaño:

$ du -hs * | sort -hr

856M    lib
746M    share
612M    lib64
312M    src
267M    java
239M    bin
179M    sbin
173M    local
93M     i686-w64-mingw32
72M     libexec
26M     include
20M     puppet
772K    X11R6
20K     man
4.0K    games
4.0K    etc
0       tmp
raychi
fuente
Esto no funciona si hay una gran cantidad de entradas en el directorio. bash: /run/current-system/sw/bin/du: Argument list too long
Chris Stryczynski
123

Prueba esto

du -h --max-depth=1

Salida

oliver@home:/usr$ sudo du -h --max-depth=1
24M     ./include
20M     ./sbin
228M    ./local
4.0K    ./src
520M    ./lib
8.0K    ./games
1.3G    ./share
255M    ./bin
2.4G    .

Alternativa

Si --max-depth=1es demasiado largo para su gusto, también puede intentar usar:

du -h -s *

Esto usa -s( --summarize) y solo imprimirá el tamaño de la carpeta por defecto. Al pasar todos los elementos en el directorio de trabajo actual ( *), produce una salida similar a la siguiente --max-depth=1:

Salida

oliver@cloud:/usr$ sudo du -h -s *
255M    bin
8.0K    games
24M     include
520M    lib
0       lib64
228M    local
20M     sbin
1.3G    share
4.0K    src

La diferencia es sutil. El primer enfoque mostrará el tamaño total del directorio de trabajo actual y el tamaño total de todas las carpetas que contiene ... pero solo hasta una profundidad de 1.

El último enfoque calculará el tamaño total de todos los elementos aprobados individualmente . Por lo tanto, incluye el enlace simbólico lib64en la salida, pero excluye los elementos ocultos (cuyo nombre comienza con un punto). También carece del tamaño total para el directorio de trabajo actual, ya que no se pasó como argumento.

Der Hochstapler
fuente
44
Respuesta perfecta. En Mac OSX, el --depthparámetro no se reconoce. Úselo du -h -d 1para el mismo resultado.
Dylan
6

Imprima los tamaños de todas las carpetas de archivos y archivos ocultos en el disco:

el@dev /home/el $ du -sh `ls -a`
258M    .
265M    ..
4.0K    .classpath
258M    .git
4.0K    .gitignore
9.0K    nbactions.xml
12K     README
20K     .README.swp
4.0K    run.sh
23K    XmlPostPropagate.php
Eric Leschinski
fuente
2
¡Pero cuidado! Por qué no deberías analizar la salida de ls (1)
Kamil Maciorowski
2

Vale la pena mencionar el comando de shell NCurses Disk Usage .

Ncdu es un analizador de uso de disco con una interfaz ncurses. Está diseñado para encontrar espacios vacíos en un servidor remoto en el que no tiene disponible una configuración gráfica completa, pero es una herramienta útil incluso en sistemas de escritorio normales. Ncdu pretende ser rápido, simple y fácil de usar, y debería poder ejecutarse en cualquier entorno mínimo similar a POSIX con ncurses instalado.

Rayo
fuente