¿Cómo obtengo el tamaño de un directorio en la línea de comando?


1065

Traté de obtener el tamaño de un directorio (que contiene directorios y subdirectorios) usando el lscomando con la opción l. Parece que funciona para archivos ( ls -l file name), pero si intento obtener el tamaño de un directorio (por ejemplo, ls -l /home), obtengo solo 4096 bytes, aunque en conjunto es mucho más grande.


18
1) Estrictamente hablando, no puedes. Linux tiene directorios, no carpetas. 2) Hay una diferencia entre el tamaño de un directorio (que es un archivo especial que contiene inodos que apuntan a otros archivos) y el tamaño del contenido de ese directorio. Como otros han señalado, el comando du proporciona este último, que es lo que parece que desea.
jamesqf

11
como parece ser nuevo, solo señalaré la -hopción útil que puede agregar a la -lopción (es decir, ls -lhpara obtener los tamaños de los archivos que se imprimirán en notación amigable para los humanos como 1.1M en lugar de 1130301. La "h "en el du -hscomando que @sam dio como respuesta a su pregunta sobre directorios también significa" legible por humanos ", y también aparece en el df -hque se muestran las cantidades legibles por humanos de espacio libre y utilizado en el disco.
msouth

Respuestas:


1490

du -sh file_path

Explicación

  • duEl comando ( d isc u sage) estima el uso del espacio file_path
  • Las opciones -shson (desde man du):

      -s, --summarize
             display only a total for each argument
    
      -h, --human-readable
             print sizes in human readable format (e.g., 1K 234M 2G)
    

    Para verificar más de un directorio y ver el total, use du -sch:

      -c, --total
             produce a grand total
    

44
... a menos que tenga
enlaces duros

15
Este es el tipo de respuesta que me encanta <3 Está resumido y es una especie de introducción al comando duy también le da la forma de buscar más detalles man du...

Sugerencia para los fabricantes tipo Unix: la próxima vez, simplemente haga primero el comando "diskusage", o tal vez incluso "uso del disco" ... luego el acceso directo ...;)
jave.web

Funciona muy bien, por find ejemplo, para contar la cantidad de espacio en subdirectorios específicos en la ruta actual: $ find . -type d -name "node_modules" -prune -exec du -sh {} \;
Alex Glukhovtsev

321

Solo usa el ducomando:

du -sh -- *

le dará el uso acumulativo del disco de todos los directorios, archivos, etc. no ocultos en el directorio actual en formato legible por humanos.

Puede usar el dfcomando para conocer el espacio libre en el sistema de archivos que contiene el directorio:

df -h .

44
du -sh *comienza a arrojar errores de "opción desconocida" si alguno de los archivos en ese directorio comienza con un guión. Más seguro de hacerdu -sh -- *
mpen

1
du -sh *no muestra el uso de memoria de carpetas ocultas
Prashant Prabhakar Singh

44
du -sh -- * .*para incluir archivos de puntos. Esto es útil para incluir un .gitdirectorio posiblemente grande , por ejemplo. Alternativamente, en zsh puede setopt globdotsglob dotfiles por defecto.
cbarrick

1
¿Qué hace el --? Sé que se aplica a las funciones integradas de shell para finalizar los argumentos de opción, pero duno es una función integrada, y no veo este uso documentado para du: linux.die.net/man/1/du
flow2k

A veces querrás agregar -b( --apparent-size)
eleg

196

dues tu amigo. Si solo quieres saber el tamaño total de un directorio, salta a él y ejecuta:

du -hs

¡¿Si también desea saber qué subcarpetas ocupan cuánto espacio en disco ?! Puede extender este comando a:

du -h --max-depth=1 | sort -hr

que le dará el tamaño de todas las subcarpetas (nivel 1). La salida se ordenará (la carpeta más grande en la parte superior).


Parece que en algunas versiones (¿quizás más antiguas?) De Linux, sort no tiene un interruptor h y, por lo tanto, el siguiente mejor comando que pude encontrar es: du -c --max-depth = 1 | sort -rn
richhallstoke

@richhallstoke si usa ncdulos archivos están ordenados por tamaño descendente de forma predeterminada.
Footfoot

3
+1 para el "| sort -hr"
afranques

67

dupuede ser complicado de usar ya que aparentemente tiene que pasar 100 argumentos para obtener una salida decente. Y descubrir el tamaño de las carpetas ocultas es aún más difícil.

Haz tu vida fácil y útilncdu .

ncdu

Obtiene resúmenes por carpeta que son fácilmente navegables.


99
Esta debería ser la respuesta correcta, al menos para aquellos que pueden instalar software en el sistema. Desafortunadamente, no creo que la mayoría de las personas se desplace hacia abajo lo suficiente como para ver esto.
DavidR

@ RickyNotaro-Garcia No, esto ignora los objetos ocultos y se cuelga en directorios grandes. Es posible que haya una solución correcta con una docena de tuberías, pero ¿por qué desperdiciar su vida?
Teque5

@ RickyNotaro-Garcia Lea todo mi comentario: su intento ignora los objetos ocultos y se cuelga en directorios grandes.
Teque5

2
ncdues genial, siempre busco este comando cuando lo olvido. Es rápido, fácil de navegar y ayuda a encontrar fácilmente carpetas grandes. Para su información, también está disponible para macOS y probablemente para todas las máquinas Linux.
Lukas

..y puede eliminar carpetas directamente ncdupresionando la dtecla
ccpizza

32

Otros lo han mencionado du, pero también me gustaría mencionar Ncdu , que es una versión de ncurses duy proporciona interactividad: puede explorar la jerarquía de directorios directamente y ver los tamaños de los subdirectorios.


26

El ducomando muestra el uso de disco del archivo.

La -hopción muestra resultados en forma legible para humanos (por ejemplo, 4k, 5M, 3G).

du -h (file name)

22

Todos los ejemplos anteriores le indicarán el tamaño de los datos en el disco (es decir, la cantidad de espacio en disco que utiliza un archivo en particular, que generalmente es mayor que el tamaño real del archivo). Hay algunas situaciones en las que esto no le dará un informe preciso, si los datos no se almacenan realmente en este disco en particular y solo existen referencias de inodo.

En su ejemplo, ha utilizado ls -l en un solo archivo, que habrá devuelto el tamaño real del archivo, NO su tamaño en el disco.

Si desea conocer los tamaños de archivo reales, agregue la opción -b a du.

du -csbh .

Si. Estoy usando archivos sdf que comprimen y deducen los archivos, por lo que no pude entender por qué informaba números tan bajos. El tamaño real de los archivos con ls se puede encontrar usando: du -b
Ryan Shillington

15

personalmente creo que esto es lo mejor, si no quieres usar ncdu

# du -sh ./*

14
df -h .; du -sh -- * | sort -hr

Esto muestra cuánto espacio en disco le queda en la unidad actual y luego le indica cuánto ocupa cada archivo / directorio. p.ej,

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb2       206G  167G   29G  86% /
115M    node_modules
2.1M    examples
68K     src
4.0K    webpack.config.js
4.0K    README.md
4.0K    package.json

Para su información, parece informar el tamaño en el disco. es decir, probablemente se rellenará al 4KB más cercano.
mpen


9

encuentre todos los archivos en el directorio actual de forma recursiva y resuma su tamaño:

find -type f -print0 | xargs -0 stat --print='%s\n' | awk '{total+=$1} END {print total}'

Solía -not -type dsumar no solo los tamaños de los archivos ordinarios ( -type f) sino también los tamaños de los enlaces simbólicos, etc.
anton_rh

Esto es genial, porque no obtienes los gastos generales necesarios para almacenar los archivos, sino solo el tamaño de los propios archivos.
bballdave025

9

Aquí hay una función para sus .bash_aliases

# du with mount exclude and sort
function dusort () {
    DIR=$(echo $1 | sed 's#\/$##')
    du -scxh $(mount | awk '{print $3}' | sort | uniq \
     | sed 's#/# --  exclude=/#') $DIR/* | sort -h
}

salida de muestra:

$ dusort /
...
0       /mnt  
0       /sbin
0       /srv
4,0K    /tmp
728K    /home
23M     /etc
169M    /boot  
528M    /root
1,4G    /usr
3,3G    /var
4,3G    /opt
9,6G    total

para subdirs:

$ dusort .
$ dusort /var/log/


6

Tenga en cuenta que duimprime el espacio que ocupa un directorio en los medios, que generalmente es más grande que el tamaño total de todos los archivos en el directorio, porque dutiene en cuenta el tamaño de toda la información auxiliar que se almacena en los medios para organizar el directorio de conformidad con formato de sistema de archivos.

Si el sistema de archivos es compresible, dupuede generar un número aún menor que el tamaño total de todos los archivos, ya que los archivos pueden estar comprimidos internamente por el sistema de archivos y, por lo tanto, ocupan menos espacio en los medios que solo la información sin comprimir que contienen. Lo mismo si hay archivos dispersos.

si hay enlaces duros en el directorio, también dupuede imprimir un valor más pequeño porque varios archivos diferentes en el directorio hacen referencia a los mismos datos en los medios.

Para obtener el tamaño total directo de todos los archivos en el directorio, se puede usar la siguiente expresión de shell de una línea (suponiendo un sistema GNU):

find . ! -type d -print0 | xargs -r0 stat -c %s | paste -sd+ - | bc

o incluso más corto:

find . ! -type d -printf '%s\n' | paste -sd+ - | bc

Simplemente suma los tamaños de todos los archivos que no son de directorio en el directorio (y sus subdirectorios de forma recursiva) uno por uno. Tenga en cuenta que para los enlaces simbólicos, informa el tamaño del enlace simbólico (no del archivo al que apunta el enlace simbólico).


5

Puedes usar

du -sh directory/

y

du -sh filename

para saber el espacio ocupado por la carpeta o archivo.

df -h

mostrará el uso del disco en formato legible para humanos -h hace eso.

También hay un programa basado en GUI llamado Disk Usage Analyzer.


5

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.