it-swarm.com.de

vergleichen Sie den Inhalt zweier Verzeichnisse auf dem Remote-Server mit Unix

Ich bin neu bei Unix und brauche hier Hilfe. Beide Verzeichnisse enthalten die gleichen Dateien. Jetzt möchte ich überprüfen, ob alle Dateien in beiden Verzeichnissen synchron sind. Wenn Dateien nicht synchron sind, möchte ich nur den Namen dieser Dateien anzeigen. Sie können nicht herausfinden, wie dies geschieht, wenn Verzeichnisse auf zwei verschiedenen Servern vorhanden sind.

eg:
server1 /abc/home/sample1/
server2 /abc/home/sample2/

hier möchte ich nur Dateinamen anzeigen, wenn es nicht synchron ist.

Danke im Voraus

22
DSD

Sie können rsync mit dem Flag -n verwenden, um herauszufinden, ob die Dateien synchron sind, ohne tatsächlich eine Synchronisierung durchzuführen.

Zum Beispiel von server1 :

rsync -n -avrc /abc/home/sample1/* server2:/abc/home/sample2/

Dadurch werden die Namen aller Dateien (rekursiv mit dem Flag -r) gedruckt, die sich zwischen server1:/abc/home/sample1/ und server2:/abc/home/sample2/ unterscheiden.

rsync verwendete Parametererklärung

-n, --dry-run - Probelauf ohne Änderungen durchführen

-a, --archive - Archivmodus; entspricht -rlptgoD (keine -H, -A, -X)

-v, --verbose - Erhöhung der Ausführlichkeit

-r, --recursive - rekursiv in Verzeichnisse

-c, --checksum - Überspringen basierend auf Prüfsumme, nicht Mod-Zeit und Größe

56
kielni

Auf Server1:

cd /abc/home/sample1/ && diff --side-by-side --suppress-common-lines <(find . -type f|xargs stat --printf "%s\t%n\n"|sort -n) <(ssh server2 "cd /abc/home/sample2/ && find . -type f|xargs stat --printf \"%s\t%n\n\"|sort -n")

Dies ist ziemlich schnell, aber wahrscheinlich nicht so genau wie bei rsync, da die Dateigröße anstelle des Hash-Inhalts verwendet wird. Das rsync aus der Antwort von kielni zeigt auch nichts, wenn Server2 mehr Dateien als Server1 hat. Versuchen Sie stattdessen Folgendes:

rsync -n -avr --size-only --delete /abc/home/sample1/ server2:/abc/home/sample2/
6
AXE-Labs

Verwenden Sie in einem Szenario ohne Verbindung zwischen zwei Servern den Befehl "tree", um die Verzeichnisstruktur in Dateien abzurufen, und unterscheiden Sie dann zwei Dateien.

0
gopuvp

Ich benutze immer rsync -avcn für solche Aufgaben - ich bin ein CLI-Fan. Die Idee ist, einen "Probelauf" (-n) durchzuführen, der zeigt, was getan worden wäre, ohne irgendwelche Dateien zu kopieren oder irgendwelche Änderungen vorzunehmen. Die Verwendung des Schalters -c ist sehr wichtig, da anhand der Prüfsumme und nicht des Änderungsdatums oder der Dateigröße festgestellt wird, ob die Dateien unterschiedlich sind. -a stellt sicher, dass der Vergleich gründlicher ist, und zwingt das Programm, in die Unterverzeichnisse einzutauchen. Schließlich erhöht -v die Ausführlichkeit, was nützlich ist, wenn verschiedene Dateien gefunden werden.

Eine mögliche Lösung sieht also so aus:

rsync -avcn source_dir/ dest_dir/

und rsync gibt die Namen der Dateien aus, die sich zwischen den beiden Verzeichnissen unterscheiden. Beachten Sie die nachgestellten Schrägstriche - sie sind unerlässlich.

jedoch:

  1. wenn es viele verschiedene Dateien gibt, füllt die Liste bald den Terminalbildschirm und ist schwer zu lesen. In diesem Fall ist es besser, die Ausgabe in eine Datei umzuleiten: rsync -avcn source_dir/ dest_dir/ > diffs.txt
  2. das mag albern klingen, aber denken Sie daran, die Leerzeichen zu maskieren, wenn das Quell- oder Zielverzeichnis sie enthält. Alternativ können Sie sie in Anführungszeichen setzen. rsync -avcn /src/My Dir/ dest/My dir/ ist nicht das, was du willst; Stattdessen solltest du rsync -avcn /src/My\ Dir/ dest/My\ Dir/ oder vielleicht rsync -avcn /src/"My Dir"/ dest/"My Dir"/ verwenden. Dieser Punkt gilt insbesondere für Windows-Bereitstellungen.
0
data.dude