Недавно я столкнулся с такой проблемой:
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}'