ubuntuusers.de

Verzeichnisse mit vielen, vielen Dateien möglichst schnell vergleichen

Status: Gelöst | Ubuntu-Version: Server 24.04 (Noble Numbat)
Antworten |

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4449

Wohnort: Göttingen

Hallo,

ich habe zwei Verzeichnisse die jeweils einige Zig-Millionen Dateien enthalten. Davon sind nur ein paar hundert Dateien, die unterschiedlich sind.

Gibt es wohl einen schnelleren Weg als mit "diff -rq" diese zu vergleichen?

Ich bin bisher nicht so richtig fündig geworden.

Vielleicht hat ja jemand eine Anregung?

schwarzheit Team-Icon

Supporter
Avatar von schwarzheit

Anmeldungsdatum:
31. Dezember 2007

Beiträge: 3901

FreeFileSync vielleicht?

sh4711

Anmeldungsdatum:
13. Februar 2011

Beiträge: 1126

Frage ChatGPT oder den Chat-Bot deines Vertrauens.
ChatGPT gibt unter anderem den Vorschlag, von allen Dateien Hashwerte zu ermitteln und so muss man nur die Hashwerte vergleichen. Das finde ich ist die beste Idee, da man ja jede Datei mit jeder vergleichen muss und somit die Lesezeiten stark minimiert werden, da jede Datei nur noch einmal eingelesen werden muss.
Sein Vorschlag lautet (ungeprüft!):

# Für beide Verzeichnisse:
find /pfad/zu/verzeichnis1 -type f -print0 | sort -z | xargs -0 -n1 -P$(nproc) md5sum > verzeichnis1.md5
find /pfad/zu/verzeichnis2 -type f -print0 | sort -z | xargs -0 -n1 -P$(nproc) md5sum > verzeichnis2.md5

und dann

diff -u verzeichnis1.md5 verzeichnis2.md5

Edit: typo

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13146

Ein Ansatz ist: md5sum mit find kombinieren um für jeden Baum eine Datei zu produzieren. Dann nach Dateinamen sortieren und die beiden Dateien diffen.

Doc_Symbiosis

(Themenstarter)
Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4449

Wohnort: Göttingen

Hi!

@schwarzheit: Danke für den Hinweis, das ist aber nicht so richtig praktikabel. @sh4711: Herzlichen Dank für den Tipp mit xargs und -P. Das funktioniert ja für das checksumming ganz hervorragend, um es zu beschleinigen! @rklm: EIn Baum wäre schön, leider liegen die Dateien alle in einem Verzeichnis.

Ich habe jetzt einfach eine Sqlite-Datenbank aufgebaut, wo ich die ganzen Checksummen speichere und damit vergleiche ich dann, wenn ich wieder vergleichen muss.

schwarzheit Team-Icon

Supporter
Avatar von schwarzheit

Anmeldungsdatum:
31. Dezember 2007

Beiträge: 3901

Doc_Symbiosis schrieb:

@schwarzheit: Danke für den Hinweis, das ist aber nicht so richtig praktikabel.

Warum? Genau für deinen Anspruch ist es doch gemacht.

Doc_Symbiosis

(Themenstarter)
Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4449

Wohnort: Göttingen

Naja, das müsste aber auf diversen Servern verteilt werden und da wären "Standardtools" schon besser.

Die Lösung mit sqlite ist jetzt aber auch super, insbesondere, seit mir ein Kollege noch coproc gezit hat, mit dem man dann die Datenbankverbindung dauerhaft offen halten kann.

Antworten |