Почему du -b показывает другой результат, чем stat?

Почему du -b показывает другой результат, чем stat?

Недавно я столкнулся с такой проблемой:

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

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

Результаты постоянно разные. Все файлы записаны в кратных размерам блока байтах.

Где жедунайти эти лишние байты? Я понимаю, что файловой системе может потребоваться больше или меньше места для хранения содержимого файлов, но я надеялся, что эта -bопция duозначает, что она должна учитывать «кажущийся» размер, а не размер, используемый файловой системой...

решение1

duвключает размер каталогов. Если вы добавите -type dк findкритериям, вы можете получить желаемый результат (я делаю это на дереве каталогов, содержащем только стандартные файлы):

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

Однако могут быть и другие типы файлов, которые занимают место, поэтому попробуйте вообще пропустить проверку типа:

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

Связанный контент