Com o GNU stat
:
stat -c %s -- $(<list) | paste -d+ -s - | bc
-
stat
exibe informações sobre o arquivo-
-c
especifica o formato,%s
fornece o tamanho do arquivo em bytes
-
-
paste -d+ -s
concatia a saída juntos linha por linha com um+
como delimitador -
bc
canalizado parabc
, será calculado em conjunto.
Adicione uma opção -L
a stat
, se para links simbólicos, você preferiria contar o tamanho do arquivo que o symlink eventualmente resolveu.
Isso pressupõe um shell como ksh
, bash
ou zsh
com o operador $(<file)
para invocar split + glob no conteúdo de um arquivo.
Aqui, espera-se que list
seja um espaço, tabulação ou nova linha (supondo o valor padrão de $IFS
), uma lista delimitada de padrões de arquivo (como em *.txt /bin/*
). Para uma lista de caminhos de arquivo, um por linha, você precisaria desabilitar o globbing e limitar o $IFS
somente para a nova linha ou com o GNU xargs
:
xargs -rd '\n' -a list stat -c %s -- | paste -sd+ - | bc