Encontre o tamanho total de determinados arquivos em uma ramificação de diretório

Encontre o tamanho total de determinados arquivos em uma ramificação de diretório

Suponha que haja um diretório de armazenamento de imagens, digamos, ./photos/john_doe, dentro do qual existem vários subdiretórios, onde residem muitos arquivos específicos (digamos, *.jpg). Como posso calcular um tamanho resumido desses arquivos abaixo da john_doeramificação?

Eu tentei du -hs ./photos/john_doe/*/*.jpg, mas isso mostra apenas arquivos individuais. Além disso, isso rastreia apenas o primeiro nível de aninhamento do john_doediretório, como john_doe/june/, mas ignora john_doe/june/outrageous/.

Então, como eu poderia percorrer todo o branch, somando o tamanho de determinados arquivos?

Responder1

find ./photos/john_doe -type f -name '*.jpg' -exec du -ch {} + | grep total$

Se for necessária mais de uma chamada duporque a lista de arquivos é muito longa, vários totais serão relatados e precisarão ser somados.

Responder2

du -ch public_html/images/*.jpg | grep total
20M total

me dá o uso total dos meus .jpgarquivos neste diretório.

Para lidar com vários diretórios, você provavelmente terá que combinar isso de findalguma forma.

Você pode encontrarexemplos de comando duútil (também inclui find)

Responder3

Principalmente, você precisa de duas coisas:

du -ch -- **/*.jpg | tail -n 1

Responder4

As respostas dadas até agora não levam em consideração que a lista de arquivos passada de find para du pode ser tão longa que find divide automaticamente a lista em pedaços, resultando em múltiplas ocorrências de total.

Você pode grep total(localidade!) Resumir manualmente ou usar um comando diferente. AFAIK, existem apenas duas maneiras de obter um total geral (em kilobytes) de todos os arquivos encontrados por find:
find . -type f -iname '*.jpg' -print0 | xargs -r0 du -a| awk '{sum+=$1} END {print sum}'

Explicação
find . -type f -iname '*.jpg' -print0: Encontre todos os arquivos com a extensão jpg, independentemente do caso (ou seja, *.jpg, *.JPG, *.Jpg...) e produza-os (terminação nula).
xargs -r0 du -a: -r: Xargs chamaria o comando mesmo sem argumentos passados, o que -r impede. -0 significa strings terminadas em nulo (não terminadas em nova linha).
awk '{sum+=$1} END {print sum}': Some os tamanhos dos arquivos gerados pelo comando anterior

E para referência, a outra maneira seria
find . -type f -iname '*.jpg' -print0 | du -c --files0-from=-

informação relacionada