A versão BSD du
usada no OS X relata o tamanho com blocos de 512 bytes - os tamanhos são essencialmente arredondados para o próximo valor de 512 bytes. Isso informa o espaço no disco, que é maior que a quantidade de dados. Se você tiver muitos arquivos pequenos, a diferença pode ser grande.
Aqui está um exemplo.
Este é o valor com regular du
. Está em blocos de 512 bytes:
$ du -s
248 .
O -h
sinalizador resulta em um número mais legível, em kilobytes. Como esperado, é metade do número de blocos de 512 bytes:
$ du -hs
124K .
Por fim, você pode usar find
e awk
fornecer a soma dos bytes reais nos arquivos. Isso é meio lento, mas funciona:
$ find . -type f -exec ls -l {} \; | awk '{sum += $5} END {print sum}'
60527
Este valor corresponde exatamente ao número informado pela janela Obter informações do Finder. (Não há garfos ou xattrs estranhos nesse conjunto de arquivos.) É significativamente menor que o valor relatado por du
.
Eis como funciona: ele obtém uma lista de todos os arquivos e os passa para ls -l
; então awk
é usado para contar os bytes. O -type f
sinalizador existe para que apenas os arquivos (e não os diretórios) sejam enviados ls
. Sem esse sinalizador, ele também enviará nomes de diretório para ls
, e cada arquivo será listado duas vezes: uma como um arquivo individual e outra como um item no diretório.
A versão GNU de du
pode fornecer valores em bytes reais, em vez de blocos. É lamentável que a versão do BSD du
não seja tão flexível.
-k
opção para usar o tamanho de bloco de 1