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

787

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

He intentado esto, 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 usado en mis discos.
David Barry
fuente
Recordatorio amistoso de que puede tener casi cero sentido en el sistema de archivos CoW como BTRFS.
val

Respuestas:

1267

El comando du"resume el uso del disco de cada ARCHIVO, recursivamente para directorios", por ejemplo,

du -hs /path/to/directory
  • -hes obtener los números "legibles por humanos", por ejemplo, obtener en 140Mlugar de 143260(tamaño en KBytes)
  • -ses un resumen (de lo contrario, obtendrá no solo el tamaño de la carpeta, sino también todo lo que está en la carpeta por separado)

Mientras lo usa -h, puede ordenar los valores legibles por humanos usando

du -h | sort -h

La -hbandera sortactivada considerará valores de tamaño "legibles para humanos".


Si desea evitar enumerar recursivamente todos los archivos y directorios, puede proporcionar el --max-depthparámetro para limitar la cantidad de elementos que se muestran. Más comúnmente,--max-depth=1

du -h --max-depth=1 /path/to/directory
Marcel Stimberg
fuente
99
respeto por hacer un esfuerzo adicional. :)
myusuf3
93
Uso du -sho DOOSH como una forma de recordarlo (NOTA: el comando es el mismo, solo la organización de las banderas de la línea de comandos para propósitos de memoria)
Marco Ceppi
3
Hay una opción útil para du llamada --apparent-size. Se puede usar para encontrar el tamaño real de un archivo o directorio (a diferencia de su huella en el disco), por ejemplo, un archivo de texto con solo 4 caracteres ocupará aproximadamente 6 bytes, pero seguirá apareciendo como ocupando ~ 4K en una salida regular du -sh. Sin embargo, si pasa la opción --apparent-size, el resultado será 6. man du dice: - tamaños aparentes de impresión de tamaño aparente, en lugar del uso del disco; aunque el tamaño aparente es generalmente más pequeño, puede ser mayor debido a agujeros en archivos ('dispersos'), fragmentación interna, bloques indirectos
Hopping Bunny
44
¡Esto también funciona para OS X! Gracias, realmente estaba buscando una manera de limpiar archivos, tanto en mi máquina local como en mi servidor, pero los métodos automatizados parecían no funcionar. Entonces, corrí du -hs *y fui al directorio más grande y descubrí qué archivos eran tan grandes ... ¡Este es un método tan bueno, y la mejor parte es que no tiene que instalar nada! Definitivamente mereció mi voto a favor
Dev
@BandaMuhammadAlHelal Creo que hay dos razones: redondeo ( dutiene un redondeo algo peculiar, que no muestra decimales si el valor tiene más de un dígito en la unidad elegida), y el clásico problema de prefijo 1024 vs. 1000 . dutiene una opción -B(o --block-size) para cambiar las unidades en las que muestra los valores, o puede usar en -blugar de -hobtener el valor "en bruto" en bytes.
Marcel Stimberg
164

Recientemente encontré una excelente herramienta interactiva basada en ncurses, que rápidamente le brinda una visión general sobre los tamaños de directorio. Busqué ese tipo de herramienta durante años.

  • desglose rápido a través de 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 comando:

apt-get install ncdu
geekQ
fuente
11
¡Esto es absolutamente fantástico! Como DaisyDisk, para OSX
subZero
3
ncdu¡es increíble! Después de instalarlo, solo haz esto ncdu /. Encontrarás muy rápidamente los archivos más grandes del sistema. Presione también hdentro de la interfaz de la consola de ncdu. Tiene atajos muy útiles
vlad-ardelean
Esto es EXACTAMENTE lo que necesitaba: tan simple, tan eficiente. Amor puro.
user3790897
52

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 formato humano

du -hsc *
Puntilla
fuente
17

¡Disfrutar!

du foldername

Más información sobre ese comando aquí

myusuf3
fuente
10

tree es otro comando útil para este trabajo:

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

tree --du -h /path/to/directory
...
...

33.7M used in 0 directories, 25 files

Del á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.)
αғsнιη
fuente
9

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/lib
992K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/results
292K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/target
 52K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/user-files
vivekyad4v
fuente
4

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

  • Ocasionalmente, la dusalida 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 debido a la potencia de 2 y la potencia de 10 unidades. El -hconmutador dudivide el número de bytes entre 2 ^ 10 (1024), 2 ^ 20 (1048576), etc. para proporcionar una salida legible por humanos. Muchas personas podrían estar más habituadas a ver potencias de 10 (por ejemplo, 1K = 1000, 1M = 1000000) y se sorprenderían con el resultado.

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

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

Ejemplo:

$ du -s -B 1
255729664

$ find .  -ls | awk '{sum += $7} END {print sum}'
249008169
pdp
fuente
Find-ls-awk devolverá un valor incorrecto para carpetas grandes # 1 . Para nuevos awk puede agregar --bignumo -M; si esa no es una opción, use el find . -ls | tr -s ' '|cut -d' ' -f 7| paste -sd+ |bc # 2 .
goozez
Si las potencias de 2 que se usan son un problema, existe la --siopción: "como -h, pero usa potencias de 1000 no 1024"
muru
1

Solo para el tamaño del directorio en un formato legible, use lo siguiente:

du -hs directoryname

Probablemente esto no se encuentre en la sección correcta, pero desde la línea de comando, podría intentar:

ls -sh filename

El -stamaño es, y el -hes legible por humanos.

Use -lpara mostrar en la lslista, como a continuación:

ls -shl
Shiv Singh
fuente
0

du /foldernamees el comando estándar para saber el tamaño de una carpeta. Se recomienda encontrar las opciones leyendo la página del manual:

man du

Debe leer la página de manual (disponible en línea ) antes de usar el comando.

Balaswamy vaddeman
fuente
0

Aquí hay un script POSIX que funcionará con:

  • Un archivo
  • Archivos
  • Un directorio
  • Directorios
#!/bin/sh
ls -ARgo "$@" | awk '{q += $3} END {print q}'

Fuente

Steven Penny
fuente
0

Si su directorio deseado tiene muchos subdirectorios, use lo siguiente:

$ cd ~/your/target/directory
$ du -csh 

-c, --total produce un gran total
-s, --summarize muestra solo un total para cada argumento
-h, - tamaños de impresión legibles por humanos en formato legible por humanos (por ejemplo, 1K 234M 2G)

que luego produciría un total general del uso de memoria de todos los archivos / carpetas en el directorio actual.

kmario23
fuente
-1

El mejor, creo, es el siguiente:

du -h directory_name | tail -n1

Esto le mostrará solo el tamaño del directorio que le interesa y no imprimirá los tamaños de ningún directorio y archivo dentro de ese directorio.

Debo agregar que si el tamaño de la carpeta es grande, du lleva más tiempo. Debe ser paciente para que este comando funcione. Al igual que cualquier otro comando de Unix, puede averiguar el tiempo total para este proceso utilizando timeantes de este comando:

time du -h directory_name | tail -n1
Pacífico
fuente
66
dutiene una opción para esto:-s
muru