
Supongamos que hay un directorio de almacenamiento de imágenes, por ejemplo, ./photos/john_doe
, dentro del cual hay varios subdirectorios, donde residen muchos archivos determinados (por ejemplo, *.jpg
). ¿Cómo puedo calcular un tamaño de resumen de esos archivos debajo de la john_doe
rama?
Lo intenté du -hs ./photos/john_doe/*/*.jpg
, pero esto muestra solo archivos individuales. Además, esto rastrea solo el primer nivel de nido del john_doe
directorio, como john_doe/june/
, pero omite john_doe/june/outrageous/
.
Entonces, ¿cómo podría recorrer toda la rama, sumando el tamaño de ciertos archivos?
Respuesta1
find ./photos/john_doe -type f -name '*.jpg' -exec du -ch {} + | grep total$
Si se requiere más de una invocación du
porque la lista de archivos es muy larga, se informarán varios totales y será necesario sumarlos.
Respuesta2
du -ch public_html/images/*.jpg | grep total
20M total
me da el uso total de mis .jpg
archivos en este directorio.
Para trabajar con varios directorios, probablemente tendrás que combinar esto de find
alguna manera.
Podrías encontrarejemplos de comandoútil (también incluye find
)
Respuesta3
Principalmente, necesitas dos cosas:
- la
-c
opción paradu
indicarle que produzca un total general; - cualquiera
**
(instrucciones de activación) ofind
(ejemplo) o para recorrer subdirectorios.
du -ch -- **/*.jpg | tail -n 1
Respuesta4
Las respuestas dadas hasta ahora no tienen en cuenta que la lista de archivos pasada de find a du puede ser tan larga que find divide automáticamente la lista en fragmentos, lo que da como resultado múltiples apariciones de total
.
Puede grep total
(¡localización!) y resumir manualmente, o usar un comando diferente. AFAIK, solo hay dos formas de obtener un total general (en kilobytes) de todos los archivos encontrados mediante búsqueda:
find . -type f -iname '*.jpg' -print0 | xargs -r0 du -a| awk '{sum+=$1} END {print sum}'
Explicación
find . -type f -iname '*.jpg' -print0
: busque todos los archivos con la extensión jpg independientemente de las mayúsculas y minúsculas (es decir, *.jpg, *.JPG, *.Jpg...) y envíelos (con terminación nula).
xargs -r0 du -a
: -r: Xargs llamaría al comando incluso sin pasar argumentos, lo que -r evita. -0 significa cadenas terminadas en nulo (no terminadas en nueva línea).
awk '{sum+=$1} END {print sum}'
: Resuma los tamaños de archivo generados por el comando anterior
Y como referencia, la otra manera sería
find . -type f -iname '*.jpg' -print0 | du -c --files0-from=-