Ich habe ein Verzeichnis mit über 400 GiB Daten. Ich wollte prüfen, ob alle Dateien fehlerfrei gelesen werden können, so dass eine einfache Art und Weise dachte ich, war tar
es in /dev/null
. Stattdessen sehe ich folgendes Verhalten:
$ time tar cf /dev/null .
real 0m4.387s
user 0m3.462s
sys 0m0.185s
$ time tar cf - . > /dev/null
real 0m3.130s
user 0m3.091s
sys 0m0.035s
$ time tar cf - . | cat > /dev/null
^C
real 10m32.985s
user 0m1.942s
sys 0m33.764s
Der dritte obige Befehl wurde von Ctrl+ gewaltsam gestoppt, Cnachdem er schon ziemlich lange gelaufen war. Während die ersten beiden Befehle funktionierten, war die Aktivitätsanzeige des Speichergeräts, das sie enthielt, .
fast immer inaktiv. Mit dem dritten Befehl leuchtet die Anzeige konstant und bedeutet extreme Betriebsamkeit.
Wenn also festgestellt werden kann, dass tar
es sich um eine Ausgabedatei handelt /dev/null
, dh wenn sie /dev/null
direkt geöffnet wird, um das tar
Dateihandle zu haben, in das geschrieben wird, wird der Dateikörper übersprungen. (Durch Hinzufügen der v
Option zum tar
Drucken werden alle Dateien im Verzeichnis tar
"rot" gedruckt .)
Also frage ich mich, warum das so ist? Ist es eine Art Optimierung? Wenn ja, warum sollte dann tar
überhaupt eine so zweifelhafte Optimierung für einen solchen Sonderfall durchgeführt werden?
Ich verwende GNU tar 1.26 mit glibc 2.27 unter Linux 4.14.105 amd64.
pv
: tar -cf - | pv >/dev/null
. Das umgeht das Problem und gibt Ihnen eine Fortschrittsinformation (die verschiedenen pv
Optionen)
gtar -cf /dev/zero ...
, um zu bekommen, was Sie möchten.
find . -type f -exec shasum -a256 -b '{}' +
. Nicht nur , dass es tatsächlich lesen und alle die Daten Prüfsumme, aber wenn Sie die Ausgabe speichern, können Sie erneut ausführen , um es später zu prüfen, ob der Inhalt der Dateien nicht verändert hat.