Encuentre el tamaño total de ciertos archivos dentro de una rama del directorio

Encuentre el tamaño total de ciertos archivos dentro de una rama del directorio

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_doerama?

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_doedirectorio, 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 duporque 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 .jpgarchivos en este directorio.

Para trabajar con varios directorios, probablemente tendrás que combinar esto de findalguna manera.

Podrías encontrarejemplos de comandoútil (también incluye find)

Respuesta3

Principalmente, necesitas dos cosas:

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=-

información relacionada