Hash-Dateien in TAR-Datei

Hash-Dateien in TAR-Datei

Ich habe zwei *.tarDateien mit ähnlichem Inhalt. Ich möchte überprüfen, welche Dateien gleich sind. Viele der Dateien sind groß, sodass ich zum Vergleichen der Hashes jede Datei aus jedem Tar extrahieren und den Hash berechnen müsste. Gibt es eine Möglichkeit, Dateien in einem Tar zu hashen, ohne es extrahieren zu müssen? Gibt es eine andere Möglichkeit, Dateien zwischen zwei *.tarDateien zu vergleichen?

Antwort1

Wenn es GNU Tar ist, führen Sie Folgendes aus:

tar -xf file1.tar --to-command=file-stats-from-tar

wo sich file-stats-from-tar irgendwo befindet $PATHund lautet:

#!/bin/bash

md5=`md5sum`;
md5=${md5%% *}

printf "%s\t%s\n" $md5 "$TAR_FILENAME"

Ändern Sie es md5sum, wenn nötig.

Damit wird alles in einem einzigen Durchgang erledigt.

Die Funktion funktioniert so, dass die --to-commandOption tar anweist,jedeDatei separat zu dem von Ihnen angegebenen Befehl, mit einer Reihe festgelegter Umgebungsvariablen (die wir nur TAR_FILENAMEhier verwenden).

Antwort2

Es mag effizientere Wege geben, aber mir ist in wenigen Augenblicken Folgendes eingefallen:

tar tf test.tar | while read x ; do echo "$(tar xfO test.tar ${x} | md5sum) ${x}" ; done

Das erste tar tflistet einfach die Dateien im Archiv auf, das dann an die while read xBash-Schleife übergeben wird. Für jeden Dateinamen findet es dann den Hash mit tar xfO test.tar ${x} | md5sumSie könnten md5sum natürlich durch Ihr bevorzugtes Hash-Tool ersetzen. Die seltsame Verwendung von echo $() ${x}besteht nur darin, die Ausgabe ähnlich einer regulären Hash-Ausgabe zu halten, mit den Werten auf der linken und den Dateinamen auf der rechten. Ohne diese Funktion erhalten Sie nur die Hashes aller Dateien, aber keine Namen, sodass Sie nicht sagen können, welche zu welcher gehört. Selbst mit dieser Funktion gibt es -in der Ausgabe eine zusätzliche Spalte von, die normalerweise nicht vorhanden ist. Sie könnte mit einem Befehl in der Pipeline leicht entfernt werden colrm.

Dies ist möglicherweise nicht die effizienteste Lösung, da die TAR-Datei n+1 Mal durchsucht werden muss, wenn sie n Dateien enthält. Hoffentlich wird der TAR-Inhalt jedoch nach dem ersten Durchlesen zwischengespeichert.

verwandte Informationen