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_doe
ramificaçã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_doe
diretó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 du
porque 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 .jpg
arquivos neste diretório.
Para lidar com vários diretórios, você provavelmente terá que combinar isso de find
alguma forma.
Você pode encontrarexemplos de comando duútil (também inclui find
)
Responder3
Principalmente, você precisa de duas coisas:
- a
-c
opção dedu
dizer para produzir um total geral; - qualquer
**
(instruções de ativação) oufind
(exemplo) ou para percorrer subdiretórios.
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=-