Supondo que você tenha du
do GNU coreutils, este comando deve calcular o tamanho aparente total do número arbitrário de arquivos regulares dentro de um diretório, sem nenhum limite arbitrário no número de arquivos:
find . -type f -print0 | du -scb --files0-from=- | tail -n 1
Adicione a opção -l
a du
se houver alguns arquivos com hardlink dentro, e você quiser contar cada hardlink separadamente (por padrão, du
contará vários hardlinks apenas uma vez).
A diferença mais importante com o du -sb
simples é que a% recursivadu
também conta os tamanhos dos diretórios, que são reportados de forma diferente por diferentes sistemas de arquivos; para evitar isso, o comando find
é usado para transmitir apenas arquivos regulares para du
. Outra diferença é que os links simbólicos são ignorados (se eles devem ser contados, o comando find
deve ser ajustado).
Esse comando também consumirá mais memória do que o du -sb
, porque usar o --files0-from=FILE
faz du
armazenar números de dispositivos e inode de todos arquivos processados, em oposição ao comportamento padrão de lembrando apenas arquivos com mais de um link físico. (Isso não é um problema se a opção -l
for usada para contar hardlinks várias vezes, porque o único motivo para armazenar os números de dispositivo e inode é ignorar os arquivos com link físico que já haviam sido processados.)
Se você deseja obter uma representação legível do tamanho total, basta adicionar a opção -h
(isso funciona porque du
é invocado apenas uma vez e calcula o tamanho total, ao contrário de outras respostas sugeridas):
find . -type f -print0 | du -scbh --files0-from=- | tail -n 1
ou (se você estiver preocupado que alguns efeitos de -b
sejam substituídos por -h
)
find . -type f -print0 | du -sc --apparent-size -h --files0-from=- | tail -n 1