A versão BSD duusada 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 -hsinalizador 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 finde awkfornecer 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 fsinalizador 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 dupode fornecer valores em bytes reais, em vez de blocos. É lamentável que a versão do BSD dunão seja tão flexível.
-kopção para usar o tamanho de bloco de 1