Die Berechnung von Prüfsummen sieht für mich nach einem Overkill aus, wenn Sie nur "zusätzliche" Dateien erkennen möchten. Sie müssen nicht die tatsächlichen Daten (Dateiinhalt) prüfen. Sie müssen Metadaten (vorhandene Pfade) überprüfen.
Um alle relativen Pfade nach innen zu bekommen /synced/dir
, renne
(cd /synced/dir && find . | sort) > structure.txt
Tun Sie es auf beiden Seiten, dann diff
die resultierenden Dateien. Beachten Sie, dass die Situation symmetrisch ist, so dass Sie auf jeder Seite "zusätzliche" sowie "fehlende" Dateien erkennen ("zusätzliche" ist hier gleichbedeutend mit "fehlendem" und umgekehrt).
Um "zusätzliche" Dateien auf der einen oder anderen Seite zu ignorieren, filtern Sie die diff
Ausgabe mit grep '^>'
(bzw. grep '^<'
).
Wenn die beiden Verzeichnisse in einem einzigen System verfügbar sind (angehängt), kann diese Bash-Syntax nützlich sein:
diff <(cd /original/dir && find . | sort) <(cd /backup/dir && find . | sort) | grep '^>'
Dies ist nicht völlig robust (z. B. Zeilenumbrüche in Dateinamen können die Logik zerstören). Behandeln Sie mein Beispiel eher als Konzeptnachweis. Der Punkt ist, dass Sie zusätzliche Dateien erkennen, ohne den Dateiinhalt überhaupt zu lesen.
Anmerkungen:
sort
ist erforderlich, da die beidenfind
s Einträge in unterschiedlicher Reihenfolge zurückgeben können, selbst wenn Verzeichnisse exakte Kopien sind;- Sole
diff
kann Verzeichnisse vergleichen, aber dieser Modus ist hier nicht hilfreich, da er versucht, den Inhalt entsprechender Dateien zu vergleichen. Dieses Verhalten möchten wir in erster Linie vermeiden.