¿Cómo determino el tamaño total de un directorio (carpeta) desde la línea de comandos?

¿Existe un comando simple para mostrar el tamaño total agregado (uso del disco) de todos los archivos en un directorio (carpeta)?

He probado estos, y no hacen lo que quiero:

  • ls -l, que solo muestra el tamaño de los archivos individuales en un directorio, ni
  • df -h, que solo muestra el espacio libre y utilizado en mis discos.

Comando du "resume el uso de disco de cada ARCHIVO, recursivamente para directorios", p. ej.,

du -hs /path/to/directory
  • -h es obtener los números "legibles por humanos", por ejemplo, obtener 140M en lugar de 143260 (tamaño en KBytes)
  • -s es para resumen (de lo contrario, obtendrá no solo el tamaño de la carpeta, sino también para todo en la carpeta por separado)

Como estás usando -h puede ordenar los valores legibles por humanos usando

du -h | sort -h

El -h bandera encendida sort considerará valores de tamaño "legibles por humanos".


Si desea evitar enumerar de forma recursiva todos los archivos y directorios, puede proporcionar el --max-depth parámetro para limitar el número de elementos que se muestran. Más comúnmente, --max-depth=1

du -h --max-depth=1 /path/to/directory

Recientemente encontré una gran herramienta interactiva basada en ncurses, que rápidamente le brinda una descripción general sobre el tamaño de los directorios. Busqué ese tipo de herramienta durante años.

  • profundice rápidamente en la jerarquía de archivos
  • puede eliminar, por ejemplo, archivos temporales enormes desde el interior de la herramienta
  • extremadamente rápido

Piense en ello como baobab para la línea de comandos:

apt-get install ncdu

Esto encuentra el tamaño de forma recursiva y lo coloca junto al nombre de cada carpeta, junto con el tamaño total en la parte inferior, todo en el formato humano

du -hsc *

¡Que lo disfrutes!

du foldername

Más información sobre ese comando aqui

A continuación se muestra lo que estoy usando para imprimir el total, la carpeta y el tamaño del archivo:

$ du -sch /home/vivek/* | sort -rh

Detalles

 ------------------------------------------------------------   -c, --total          produce a grand total   -h, --human-readable          print sizes in human readable format (e.g., 1K 234M 2G)   -s, --summarize          display only a total for each argument -------------------------------------------------------------   -h, --human-numeric-sort          compare human readable numbers (e.g., 2K 1G)   -r, --reverse          reverse the result of comparisons

Salida

 70M    total 69M    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/lib992K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/results292K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/target 52K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/user-files

tree es otro comando útil para este trabajo:

Simplemente instálelo a través de sudo apt-get install tree y escriba lo siguiente:

tree --du -h /path/to/directory......33.7M used in 0 directories, 25 files

De árbol del hombre:

-h    Print  the size of each file but in a more human readable way, e.g. appending a size letter for kilo‐      bytes (K), megabytes (M), gigabytes (G), terabytes (T), petabytes (P) and exabytes (E).--du  For each directory report its size as the accumulation of sizes of all its files and  sub-directories      (and their files, and so on). The total amount of used space is also given in the final report (like      the 'du -c' command.)

Las respuestas han hecho obvio que du es la herramienta para encontrar el tamaño total de un directorio. Sin embargo, hay un par de factores a considerar:

  • Ocasionalmente, du la salida puede ser engañosa porque informa el espacio asignado por el sistema de archivos, que puede ser diferente de la suma de los tamaños de los archivos individuales. Por lo general, el sistema de archivos asignará 4096 bytes para un archivo, incluso si almacenó solo un carácter en él.

  • Diferencias de salida debidas a la potencia de 2 y la potencia de 10 unidades. El -h cambiar a du divide el número de bytes por 2^10 (1024), 2^20 (1048576) etc para dar una salida legible por humanos. Muchas personas podrían estar más acostumbradas a ver potencias de 10 (por ejemplo, 1K = 1000, 1M = 1000000) y sorprenderse con el resultado.

Para encontrar la suma total de tamaños de todos los archivos de un directorio, en bytes, haga lo siguiente:

find <dir> -ls | awk '{sum += $7} END {print sum}'

Ejemplo:

$ du -s -B 1255729664$ find .  -ls | awk '{sum += $7} END {print sum}'249008169

Puede utilizar la herramienta Polvo:

PS C:\git> dust   0B       ┌── templates           │                                      █ │   0%   0B     ┌─┴ git-core              │                                      █ │   0%   0B   ┌─┴ share                   │                                      █ │   0%  76B   ├── readme.md               │                                      █ │   0% 156K   │   ┌── less.exe            │▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█ │   2% 2.7M   │   ├── git-remote-https.exe│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█████████████████ │  42% 3.6M   │   ├── git.exe             │▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██████████████████████ │  56% 6.5M   │ ┌─┴ git-core              │███████████████████████████████████████ │ 100% 6.5M   ├─┴ libexec                 │███████████████████████████████████████ │ 100% 6.5M ┌─┴ .                         │███████████████████████████████████████ │ 100%

Mi ejemplo es de Windows, pero Linux y Apple también son compatibles:

https://github.com/bootandy/dust

Estoy condicionado a la ll comando con alias a ls -alF. Solo falta un recuento de archivos y el tamaño de los archivos en la parte inferior. Jugué con du y tree pero no pude obtener los totales que necesitaba. Así que creé lll para hacer eso por mí.

En tu ~/.bashrc coloque lo siguiente:

lll () {    ls -alF "$@"    arr=($(ls -alF "$@" | awk '{TOTAL+=$5} END {print NR, TOTAL}'))    printf " \33[1;31m ${arr[0]}\33[m line(s).  "    printf "Total size: \33[1;31m ${arr[1]}\33[m\n"#    printf "Total size: \33[1;31m $(BytesToHuman <<< ${arr[1]})\33[m\n"}

Guarde el archivo y utilícelo como recurso . ~/.bashrc (o puede reiniciar su terminal).


Salida de muestra

Lo bueno de ll la salida son sus colores. Esto se mantiene con lll pero perdido al usar find o du:

lll sample output.png


TL; DR

Una función de bonificación a la que puede agregar ~/.bashrc se llama BytesToHuman(). Esto hace lo que la mayoría de los usuarios de consolas esperarían al convertir grandes números a MiB, GiB, etc:

function BytesToHuman() {    # https://unix.stackexchange.com/questions/44040/a-standard-tool-to-convert-a-byte-count-into-human-kib-mib-etc-like-du-ls1/259254#259254    read StdIn    b=${StdIn:-0}; d=''; s=0; S=(Bytes {K,M,G,T,E,P,Y,Z}iB)    while ((b > 1024)); do        d="$(printf ".%02d" $((b % 1024 * 100 / 1024)))"        b=$((b / 1024))        let s++    done    echo "$b$d ${S[$s]}"} # BytesToHuman ()

A continuación, voltee el comentario entre dos líneas lll () función para parecerse a esto:

#    printf "Total size: \33[1;31m ${arr[1]}\33[m\n"    printf "Total size: \33[1;31m $(BytesToHuman <<< ${arr[1]})\33[m\n"

Ahora su salida se ve así:

lll sample output 2.png

Como siempre, no se olvide de volver a la fuente con . ~/.bashrc siempre que realice cambios. (O reinicie el terminal, por supuesto)

PD: Dos semanas en cuarentena finalmente me dieron tiempo para trabajar en este objetivo de cinco años.

du /foldername es el comando estándar para conocer el tamaño de una carpeta. Es una práctica recomendada encontrar las opciones leyendo la página de manual:

man du

Debe leer la página de manual (disponible online) antes de usar el comando.

Recordatorio amistoso de que puede tener casi cero sentido en un sistema de archivos como BTRFS.