Por que du -b mostra um resultado diferente de stat?

Por que du -b mostra um resultado diferente de stat?

Recentemente me deparei com este problema:

find /tmp/tmp33hn25wv -type f -exec stat --format='%s' {} + | awk '{s+=$1} END {print s}'
10420224

du -bs /tmp/tmp33hn25wv
12198004    /tmp/tmp33hn25wv

Os resultados são consistentemente diferentes. Todos os arquivos são gravados em múltiplos de bytes de tamanho de bloco.

Ondevocêencontrar esses bytes extras? Entendo que o sistema de arquivos pode precisar de mais ou menos espaço para armazenar o conteúdo dos arquivos, mas esperava que essa -bopção dusignificasse que ele deveria contar o tamanho "aparente", não o tamanho usado pelo sistema de arquivos...

Responder1

duinclui o tamanho dos diretórios. Se você adicionar -type daos findcritérios, poderá obter o resultado desejado (eu faço em uma árvore de diretórios contendo apenas arquivos padrão):

find /tmp/tmp33hn25wv \( -type f -o -type d \) -exec stat --format='%s' {} + |\
    awk '{s+=$1} END {print s}'

No entanto, pode haver outros tipos de arquivo que ocupam espaço, então tente omitir completamente a verificação de tipo:

find /tmp/tmp33hn25wv -exec stat --format='%s' {} + | awk '{s+=$1} END {print s}'

informação relacionada