obtener el tamaño aproximado del directorio (incluidos de manera recursiva todos los archivos y subdirectorios)

10

¿Hay alguna manera de obtener rápidamente un tamaño exacto para un directorio (incluidos, recursivamente, todos sus subdirectorios)? No quiero los tamaños de los subdirectores, solo quiero decir que deben incluirse recursivamente en el tamaño total informado.

De lo contrario, ¿una forma de obtener un tamaño aproximado? Estoy pensando en algo dfque produce una respuesta rápida para todo el sistema de archivos, pero esta vez para un directorio específico (y sus subdirectorios).

Las soluciones que usan duparecen tomar años cuando un directorio contiene miles de subdirectorios.

Marcus Junius Brutus
fuente
Usar dues el único método que conozco. El problema es que los datos se distribuyen por toda la jerarquía, por lo que debe contarlos con una herramienta para obtener los recuentos.
slm

Respuestas:

15

Encuentro que esto es bastante útil.

du -sm Directory

o para obtener un desglose de los directorios internos

du -sm Directory/*

y luego con una especie si tiene muchas subdirecciones

du -sm Directory/* | sort -n 

La razón por la que uso la opción -m es para asegurarme de obtener una salida de megabytes. Creo que es más fácil para mí comparar visualmente (cuando no obtengo una combinación de unidades, por ejemplo, comparar 999 KB y 1 MB frente a 999000 MB y 1000000 MB), el beneficio adicional es que puede pasar la salida en orden.

Póngalo todo en segundo plano y redirija la salida, llevará tiempo cualquier método que se use, es un recorrido de muchos archivos que llevará tiempo.

du -sm Directory/* | sort -nr > ~/cacheDu.log &

Tenga en cuenta el orden inverso para que los grandes estén al principio. Agregue esto a la ejecución cron cada n minutos.

Luego, con un alias ducache, tiene un uso de directorio bastante actualizado.

export alias ducache='head -n 15 ~/cacheDu.log'
X Tian
fuente
@X Tian ve mi comentario sobre la respuesta de Glenn Jackman
Marcus Junius Brutus
Aceptado, es por eso que uso -m and sort
X Tian
3
Recuerde shopt -s dotglob, de lo contrario du -sm Directory/*no contará los archivos / directorios ocultos.
Dmitry Grigoryev
@XTian lo siento pero no pude, por lo que algunos comandos ayudan.
Maveň ツ
Lo tengo desde aquí
Maveň ツ
5
du -sh "$dir"

le dará un resumen del tamaño total en salida formateada "humana".


Como estabas buscando una alternativa du, lo intenté find, pero es exactamente lo mismo:

$ find . -printf "%s\n" | { 
    sum=0
    while read size; do ((sum+=size)); done
    echo $sum
}
122865202884
$ du -sb .
122865202884    .
Glenn Jackman
fuente
Gracias, soy consciente de eso, pero dulleva demasiado tiempo ya que produce un resultado preciso. Esperaba una herramienta / comando que proporcione una respuesta aproximada rápida y sucia.
Marcus Junius Brutus
Hay dfpero que funciona en todo el sistema de archivos.
Glenn Jackman
1

Puede que no le guste mi respuesta, pero creo que la mejor manera de hacer lo que quiere es ejecutar el "du -s" en segundo plano de forma regular utilizando cron y almacenar el resultado en un archivo. Luego, cuando desee un valor aproximado, use el valor del archivo. Puedes decidir con qué frecuencia ejecutar el du. No veo una forma más rápida de obtener el valor. El comando du es eficiente para lo que hace.

La única otra forma de hacerlo rápidamente es creando un sistema de archivos para el directorio, luego df le dará la respuesta que desea muy rápidamente.

Si es más rápido saber todo en el sistema de archivos, excepto su directorio, puede ejecutar df para el sistema de archivos, du para todo lo que no sea su directorio y restar.

Robert Jacobs
fuente
0

No se ajusta exactamente a sus necesidades (no impresión de una línea) pero es mucho más fácil que otras soluciones:

du -a -h | sort -hr | head -2

Este comando le dará el tamaño del directorio y subdirectorio y el tamaño del archivo o subdirectorio más grande en el directorio actual.

PD: head -2es en caso de que un subdirectorio tome todo el lugar del directorio actual y se escuche antes que el actual.

Nodulaire
fuente