$ ls -goR | awk '{sum += $3} END{print sum}'
16992
Editar. Para excluir diretórios, use grep
$ ls -goR | grep -v ^d | awk '{sum += $3} END{print sum}'
6
Suponha que eu crie um diretório test/
, com dois arquivos ( test/a
, test/b
) e um diretório interno test/c
com um arquivo test/c/d
, assim:
mkdir test
cd test
touch a
echo 1 > a
touch b
echo 1 > b
mkdir c
cd c
touch d
echo 1 > d
cd ../..
du test -ab
A saída da última linha (executando du
) é:
2 test/a
4096 test/c
2 test/b
8196 test
O tamanho do diretório é 8196 (em vez de 6, que seria: tamanho do arquivo a + tamanho do arquivo b + tamanho do arquivo c / d). Isso porque, como eu entendo, du inclui o tamanho dos próprios diretórios (porque um diretório é apenas um arquivo especial, que registra entradas de arquivo).
Eu não quero isso. Eu quero ver o tamanho combinado de todos os arquivos em um diretório (a maneira como o Windows Explorer relata o tamanho do diretório). Então, neste exemplo, o resultado deve ser:
2 test/a
2 test/c
2 test/b
6 test
Mais importante, o que eu realmente quero é a última linha: a soma dos tamanhos de todos os arquivos no diretório (recursivamente).
Mas eu passei por todas as opções de du, e não parece haver uma maneira de fazer isso. Existe alguma maneira?
Se tudo o que você quer é o tamanho dos arquivos, excluindo o espaço ocupado pelos diretórios, você pode fazer algo como
$ find test/ -type f -print0 | xargs -0 du -scb | awk '/total/{k+=$1}END{print k" total"}'
6 total
Você especifica que deseja um resumo de arquivos dentro de um diretório, mas sua saída de exemplo inclui arquivos específicos.
Para detalhes, incluindo arquivos específicos, tente isto:
$ find test/ -exec du -s {} \;
20 test/
4 test/b
4 test/a
8 test/c
4 test/c/d
Para apenas um resumo de cada diretório, tente isto:
$ find test/ -type d -exec du -s {} \;
20 test/
8 test/c
Espero que isso seja útil para você?