Ich versuche ein Python-Skript zu schreiben, das die md5sum aller Dateien in einem Verzeichnis (unter Linux) bekommt. Was ich glaube, habe ich in dem Code unten getan.
Ich möchte dies ausführen können, um sicherzustellen, dass keine Dateien im Verzeichnis geändert wurden und keine Dateien zum Löschen hinzugefügt wurden.
Das Problem ist, wenn ich eine Datei im Verzeichnis ändere, sie dann aber wieder ändere. Ich bekomme ein anderes Ergebnis von der Ausführung der Funktion unten. (Obwohl ich die geänderte Datei zurück änderte.
Kann jemand das erklären? Und lassen Sie mich wissen, wenn Sie an eine Umgehung denken können?
%Vor%Bearbeiten: Wie diese feinen Leute geantwortet haben, sieht es so aus, als ob tar Headerinformationen wie das Datum enthält. Würde die Verwendung von zip anders oder in einem anderen Format funktionieren?
Irgendwelche anderen Ideen für Arbeitsumgebungen?
Wie in den anderen Antworten erwähnt, können zwei tar-Dateien unterschiedlich sein, auch wenn der Inhalt entweder aufgrund von Änderungen der tar-Metadaten oder Änderungen der Dateireihenfolge identisch ist. Sie sollten die Prüfsumme für die Dateidaten direkt ausführen und die Verzeichnislisten sortieren, um sicherzustellen, dass sie immer in der gleichen Reihenfolge sind. Wenn Sie einige Metadaten in die Prüfsumme einbeziehen möchten, fügen Sie sie manuell hinzu.
Nicht getestetes Beispiel mit os.walk
:
Sie müssen die TAR-Datei nicht dazu bringen, das zu tun, was Sie vorschlagen.
Hier ist Ihr Workaround-Algorithmus:
Die einzelne resultierende Signatur ist genau das, wonach Sie suchen.
Verdammt, du brauchst Python nicht einmal. Sie können dies tun:
%Vor% tar
-Dateien enthalten Metadaten, die über den eigentlichen Dateiinhalt hinausgehen, z. B. Dateizugriffszeiten, Änderungszeiten usw. Auch wenn sich der Inhalt der Datei nicht ändert, ist die Datei tar
tatsächlich anders.