Bestimmen Sie, ob Dateien in einem Verzeichnis hinzugefügt, entfernt oder geändert wurden

7

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?

    
Greg 06.09.2011, 19:26
quelle

4 Antworten

8

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 :

%Vor%     
Rosh Oxymoron 06.09.2011, 19:47
quelle
7

TAR-Dateiheader enthalten ein Feld für den geänderten Zeitpunkt der Datei; Der Vorgang des Änderns einer Datei, auch wenn diese Änderung später zurück geändert wird, bedeutet, dass die Header der TAR-Datei unterschiedlich sind, was zu unterschiedlichen Hashwerten führt.

    
Joe 06.09.2011 19:30
quelle
3

Sie müssen die TAR-Datei nicht dazu bringen, das zu tun, was Sie vorschlagen.

Hier ist Ihr Workaround-Algorithmus:

  1. Gehen Sie den Verzeichnisbaum durch;
  2. Nimm die MD5-Signatur jeder Datei;
  3. Sortieren Sie die Signaturen;
  4. Nimm die md5-Signatur der Textzeichenfolge aller Signaturen der einzelnen Dateien.

Die einzelne resultierende Signatur ist genau das, wonach Sie suchen.

Verdammt, du brauchst Python nicht einmal. Sie können dies tun:

%Vor%     
the wolf 06.09.2011 19:38
quelle
1

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.

    
Yann Ramin 06.09.2011 19:31
quelle

Tags und Links