Warum zeigt du -b ein anderes Ergebnis als stat?

Warum zeigt du -b ein anderes Ergebnis als stat?

Ich bin vor kurzem auf dieses Problem gestoßen:

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

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

Die Ergebnisse sind durchweg unterschiedlich. Alle Dateien werden in Vielfachen der Blockgröße Byte geschrieben.

Woher kommtdudiese zusätzlichen Bytes finden? Ich verstehe, dass das Dateisystem mehr oder weniger Speicherplatz zum Speichern der Dateiinhalte benötigen kann, aber ich hoffte, dass diese -bOption dubedeutet, dass die „scheinbare“ Größe gezählt werden muss und nicht die vom Dateisystem verwendete Größe …

Antwort1

dubeinhaltet die Größe von Verzeichnissen. Wenn Sie -type ddie findKriterien ergänzen, erhalten Sie möglicherweise das gewünschte Ergebnis (ich mache das bei einem Verzeichnisbaum, der nur Standarddateien enthält):

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

Es kann jedoch auch andere Dateitypen geben, die Speicherplatz beanspruchen. Versuchen Sie daher, die Typprüfung ganz wegzulassen:

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

verwandte Informationen