A versão BSD de du
usada no tamanho de relatórios do OS X com blocos de 512 bytes - os tamanhos são 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ê tem muitos arquivos pequenos, a diferença pode ser grande.
Aqui está um exemplo.
Este é o valor com du
regular. Está em blocos de 512 bytes:
$ du -s
248 .
O sinalizador -h
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
para obter 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
Esse valor corresponde exatamente ao número informado pela janela Obter Informações do Finder. (Não há nenhum forks ou xattrs estranhos neste conjunto de arquivos.) É significativamente menor que o valor reportado por du
.
Veja 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
flag está lá para que apenas arquivos (e não diretórios) sejam enviados para ls
. Sem esse sinalizador, ele também enviará nomes de diretório para ls
, e cada arquivo será listado duas vezes: uma vez como um arquivo individual e uma vez 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 BSD de du
não seja tão flexível.