Ich führte einen Test durch, bei dem zwei Teere aus demselben Verzeichnis erstellt wurden (die Dateien blieben unverändert), und ich stellte fest, dass die MD5-Summen unterschiedlich waren. Ich nehme an, dass im Header des Tar ein Zeitstempel enthalten ist, aber ich habe keinen Weg gefunden, ihn zu überschreiben. Mein Betriebssystem ist Ubuntu 9.1. Irgendwelche Ideen ?
Vielen Dank.
touch filename
wenn sich die Änderungszeit einer Datei ändert, reicht dies aus, um die Prüfsumme zu ändern.Antworten:
Wie Dennis oben erwähnt hat, ist es GZIP. Ein Teil des gzip-Headers ist eine Mod-Zeit für alles, was in der Datei komprimiert ist. Wenn Sie gzip benötigen, können Sie die Tarfile als zusätzlichen Schritt außerhalb von tar komprimieren, anstatt das interne gzip von tar zu verwenden. Der Befehl gzip verfügt über ein Flag, um das Speichern dieser Änderungszeit zu unterdrücken.
Dies wirkt sich nicht auf die Zeiten innerhalb der Tarfile aus, sondern nur auf die im GZIP-Header.
quelle
GZIP=-n tar -cz ...
Um eine tar-Datei mit einer konsistenten Prüfsumme zu erstellen, müssen Sie nur Folgendes voranstellen
GZIP=-n
:So funktioniert das: Tar kann gzip-Optionen mit einer temporären
GZIP
Umgebungsvariablen wie oben akzeptieren . Wie Valter sagte, verwendet tar gzip, das standardmäßig einen Zeitstempel in das Archiv schreibt. Dies bedeutet, dass Sie eine andere Prüfsumme erhalten, wenn Sie dieselben Dateien komprimieren. Die-n
Option deaktiviert diesen Zeitstempel.quelle
Ich hatte auch dieses Problem, damit gzip den Zeitstempel nicht verändert, benutze
gzip -n
-n, --no-name speichert den ursprünglichen Namen und den Zeitstempel nicht und stellt ihn nicht wieder her
Beispiel:
quelle
Nachdem die anderen Antworten versagt hatten, bin ich in ein Kaninchenbaugebiet gefahren und habe herausgefunden, dass meine Version von tar (1.27.1 aus openSUSE 42.3 OSS repo)
pax
standardmäßig das nicht deterministische Archivierungsformat verwendet, was sogar bedeutet Ohne Komprimierung (und sogar ohne explizite Einstellung der mtime) würden sich Archive, die mit tar aus denselben Dateien erstellt wurden, unterscheiden:Beachten Sie, dass die Ausgabe oben unterschiedlich ist, obwohl keine Komprimierung verwendet wird . Die unkomprimierten Archivinhalte (die durch zweimaliges Ausführen von tar auf denselben Inhalten generiert werden) sind unterschiedlich, sodass sich die komprimierten Inhalte auch dann unterscheiden, wenn sie verwendet werden,
GZIP=-n
wie andere Antworten vermuten lassenUm dies zu umgehen, können Sie Folgendes angeben
--format gnu
:Dies funktioniert mit dem obigen Vorschlag zu gzip:
Zusätzlich zu den triftigen Gründen, bessere Komprimierungsformate gegenüber gzip zu bevorzugen , können Sie auch die Verwendung von xz in Betracht ziehen (was tar auch mit den Flags
--xz
oder-J
anstelle von unterstützt-z
), da Sie hier einen Schritt sparen. Das Standardverhalten vonxz
ist, die gleiche komprimierte Ausgabe zu generieren, wenn die unkomprimierten Inhalte gleich sind. Es ist daher nicht erforderlich, eine Option wie dieGZIP=-n
folgende anzugeben :quelle