du comando no analiza directorios ocultos

25

Quiero estimar la cantidad de espacio en disco utilizado por un directorio con el siguiente comando.

du -sh dir_name

que no calcula los directorios ocultos. En la página de manual de du no hay información al respecto. Cómo calcular la cantidad de espacio en disco utilizado por los directorios, incluidos los archivos ocultos.

Talespin_Kit
fuente

Respuestas:

13

En realidad lo hace, aquí está la prueba:

mkdir .test
echo "hi" > .test/appo
du -a
4       ./.test/appo
8       ./.test
12      .

La -aopción se usa para mostrar explícitamente qué archivos se contaron.

Estas usando du *?

stivlo
fuente
3
+1 para... you maybe using "du *" ?
sehe
2
No estoy usando "du *". Olvidé mencionar en la pregunta que necesito el resumen resumido total. así que si uso tanto -a como -s como en du -as me sale un mensaje de error que dice "du: no puedo resumir y mostrar todas las entradas". Este es un problema. La otra cosa es que incluso con du -ai puedo ver solo los archivos de primer nivel. es decir, no puede ver archivos dentro de directorios ocultos.
Talespin_Kit
1
Acabo de agregar -a para mostrar todos los archivos que se cuentan, simplemente no agregue esa bandera, solo afecta la visualización, no los totales. Le mostré un contraejemplo que, en cambio, se cuentan los directorios ocultos.
stivlo
1
Ahora encontré el problema. El problema era que el directorio oculto era un enlace simbólico, así que tuve que usar "du -Lsh dir_name". Gracias.
Talespin_Kit
1
Ah, ya veo, me alegro de que lo hayas encontrado, saludos.
stivlo
53

Este comando muestra el tamaño resumido de los directorios ocultos.

du -hs .[^.]*

ecerutti
fuente
1
Esto es exactamente lo que estaba buscando, gracias :)
Nikana Reklawyks
esta es la solución correcta
3pns
sería increíble si pudieras explicar un poco la magia detrás de esto. ayudaría a formar una respuesta que incluye tanto archivos y directorios ocultos como no ocultos.
kumetix
13

El comando correcto es: du -hs $(ls -A)

$ du -hs $(ls -A)
0   test
0   .test

du -hs .* *, como se menciona en otra respuesta, no es correcto si desea enumerar todos los archivos y subdirectorios (incluidos los ocultos).

Ejemplo:

$ touch test
$ touch .test
$ echo *
test
$ echo .* *
. .. .test test
$ du -hs .* *
4,0K    .
1,8G    ..

¿Por qué se ducomporta así? Debido a que se utiliza -s, que resumen el resultado y que todos los archivos y subdirectorios son hijos de .manera du -hsno enumerarlos!

Guillaume Missonnier
fuente
11

Para su información, para estimar el tamaño ocupado por varios directorios, es mucho mejor usar ncdu

Puede navegar en la GUI de ncurses entre varios directorios y mostrará el tamaño de cada directorio. Si estoy usando du, tendría que ejecutar el comando du para cada directorio que deseo verificar y que pueda ser engorroso. Puede ordenar los directorios de acuerdo con el tamaño ocupado también en la GUI ncurses.

Abhijeet Rastogi
fuente
1
Edite su respuesta para indicar por qué cree que ncdu es "mucho mejor". La página vinculada realmente no dice nada más que es una versión basada en ncurses du. Además de un método de visualización más elegante, no hay indicios obvios de ninguna diferencia funcional.
Dave Sherohman
Creo que la capacidad de ajustar dinámicamente su consulta es un gran beneficio. Puedo ejecutar ncdu en ~, aprender qué directorios están usando más espacio y luego sumergirme directamente en ellos. También le da el denlace para eliminar directorios, para que pueda limpiar directamente desde la interfaz.
user88974
5

Lo hace y no lo hace. Ejemplo:

En el directorio de inicio: (solo existe un usuario)

du -sh /home/*
2.6G    /home/user

en el directorio de usuarios: (gran diferencia entre las sumas)

du -sh *
61M     bin
2.0M    dump-20130124104823.tar.gz
651M    public_html
472K    twitter-2.0.0.gem
11M     wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2

y la razón es:

du -sh /home/user/.rvm/
1.9G    /home/user/.rvm/

du calculará directorios ocultos mientras desciende a subdirectorios, pero en el directorio actual * simplemente no coincide con el patrón .directory_name, por lo que se omitirán los elementos ocultos del directorio actual.

Me tomó un tiempo darme cuenta, y como recomienda Shadyabhi, habría sido obvio si hubiera usado ncdu.

bonyiii
fuente
1

El comando correcto es: du -hs .* *

gorrión
fuente
Alguna información adicional haría de esta una respuesta aceptable.
Ramhound
1

find -maxdepth 1 -exec du -sh "{}" \; | sort -h

Esto te da:

  • Tamaño de archivos / directorios ocultos
  • Tamaño de archivos / directorios no ocultos
  • Gran tamaño total del directorio actual

También ordena la salida para que sea fácil ver cuál es el más grande. También hice de esto un alias en mi ~/.bash_aliasesarchivo.

alias big='find -maxdepth 1 -exec du -sh "{}" \; | sort -h'
alias sbig='sudo find -maxdepth 1 -exec du -sh "{}" \; | sort -h'

Ahora solo puedo ejecutar bigpara encontrar los directorios más grandes en un directorio y sbigcuando necesito permisos de sudo.

Mitchell Tracy
fuente
0
du -ahd1 | sort -hr | head -10

La siguiente es la descripción de la -dopción en du --help:

-d, --max-depth = N imprime el total para un directorio (o archivo, con --todos) solo si tiene N o menos niveles por debajo del argumento de la línea de comando; --max-depth = 0 es lo mismo que --summarize

luochen1990
fuente
Aunque esto puede ayudar a resolver el problema, no explica por qué y / o cómo aborda el problema. Proporcionar este contexto adicional mejoraría significativamente su valor educativo a largo plazo. Edite su respuesta para agregar una explicación, incluidas las limitaciones y suposiciones aplicables. Gracias.
Fixer1234
0

Este comando lo ayudará a verificar el uso del disco para ingresar al directorio y ejecutar lo siguiente.
"du -sch. [!.] * * | sort -h"

Aquí está la demostración de cómo calcular el uso de un disco de un directorio en particular. He creado un directorio llamado Du_sh y creo dos archivos (uno oculto de 10 MB y 20 MB normales) dentro.

nikhil@debian:~$ mkdir Du_sh nikhil@debian:~$ cd Du_sh/ nikhil@debian:~/Du_sh$ dd if=/dev/zero of=.10MB bs=1024 count=10240 10240+0 records in 10240+0 records out 10485760 bytes (10 MB, 10 MiB) copied, 0.0299941 s, 350 MB/s nikhil@debian:~/Du_sh$ nikhil@debian:~/Du_sh$ dd if=/dev/zero of=20MB bs=2048 count=10240 10240+0 records in 10240+0 records out 20971520 bytes (21 MB, 20 MiB) copied, 0.0342258 s, 613 MB/s nikhil@debian:~/Du_sh$ du -sch .[!.]* * 10M .10MB 20M 20MB 30M total nikhil@debian:~/Du_sh$ du -sch .[!.]* * | sort -h 10M .10MB 20M 20MB 30M total nikhil@debian:~/Du_sh$

Nix Nikhil
fuente