¿Por qué du -b muestra un resultado diferente al de stat?

¿Por qué du -b muestra un resultado diferente al de stat?

Recientemente me encontré con 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

Los resultados son consistentemente diferentes. Todos los archivos se escriben en múltiplos de bytes de tamaño de bloque.

Donde haceduencontrar estos bytes extra? Entiendo que el sistema de archivos puede necesitar más o menos espacio para almacenar el contenido de los archivos, pero esperaba que esa -bopción dusignificara que tiene que contar el tamaño "aparente", no el tamaño utilizado por el sistema de archivos...

Respuesta1

duincluye el tamaño de los directorios. Si agrega -type da los findcriterios, puede obtener el resultado que desea (lo hago en un árbol de directorios que contiene solo archivos estándar):

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

Sin embargo, puede haber otros tipos de archivos que ocupen espacio, así que intente omitir la verificación de tipo por completo:

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

información relacionada