So vergleichen Sie Unterschiede zwischen Verzeichnissen (Linux)

24

Ich habe zwei Verzeichnisse - eines aus einer früheren Sicherung und eines aus der neuesten Sicherung. Wie vergleiche ich, welche Änderungen an Dateien im Verzeichnis von der neuesten Sicherung unter Linux vorgenommen wurden? Auch wie kann ich Änderungen in zum Beispiel Text- und PHP-Dateien anzeigen? Ich denke an etwas wie den Revisionsverlauf in Wikipedia, in dem Sie die alte Version auf einer Seite des Bildschirms und die neueste Version auf der anderen Seite sehen und Änderungen hervorgehoben werden. Wie erreiche ich so etwas?

edit: Wie vergleiche ich auch remote dir mit local?

Phil
quelle

Antworten:

35

Aus der Diff-Manpage:

Wenn sowohl from-file als auch to-file Verzeichnisse sind, vergleicht diff die entsprechenden Dateien in beiden Verzeichnissen in alphabetischer Reihenfolge. Dieser Vergleich ist nur dann rekursiv, wenn die Option -r oder --recursive angegeben ist. diff vergleicht niemals den tatsächlichen Inhalt eines Verzeichnisses, als wäre es eine Datei. Bei der vollständig angegebenen Datei handelt es sich möglicherweise nicht um eine Standardeingabe, da die Standardeingabe namenlos ist und der Begriff "Datei mit demselben Namen" nicht gilt.

So vergleichen Sie Verzeichnisse: diff --brief -r dir1 dir2

So vergleichen Sie Dateien nebeneinander: diff --side-by-side file1 file2

Sean Staats
quelle
Sehr cool, ich werde es versuchen
Phil
... ich frage mich, wie ich Remote-Verzeichnis mit lokalen vergleichen?
Phil
1
Sie müssten das Remote-Verzeichnis auf dem lokalen Computer bereitstellen. Sie können Dateien jedoch wie folgt remote vergleichen: ssh REMOTE_SERVER "cat / path / to / some / file" | diff - side-by-side / path-to-some-file - Der Befehl 'sdiff' funktioniert wie 'diff - side-by-side', wenn Sie eine Eingabe speichern möchten.
Sean Staats
2
Verwenden Sie NFS, um das Remote-Verzeichnis bereitzustellen. Bearbeiten Sie auf dem Remote-Server (Server-b) / etc / exports und geben Sie Folgendes ein: / path / of / directory / to / share server-a.ip.address (ro, no_root_squash) Starten Sie NFS auf Server-b (/etc/init.d/nfs start) Mounten Sie auf Ihrem lokalen Server (server-a), indem Sie Folgendes zu / etc / fstab hinzufügen: server-b.ip.add: / path / of / directory / to / share / mnt / server-b nfs rsize = 32768, wsize = 32768, rw 0 0 Dann auf server-a, mkdir / mnt / server-b; mount / mnt / server-b Danke für die positiven Bewertungen.
Sean Staats
2
Sie können sshfsein temporäres Ad-hoc-Netzwerkverzeichnis erstellen, anstatt NFS zu verwenden.
Dan Andreatta
3

Vorausgesetzt:

  • wir sind dran www1, verglichen mit fernwww2
  • Es gibt eine öffentliche Schlüsselauthentifizierung von lokal www1zu remotewww2
  • Wir vergleichen als der gleiche Benutzer auf lokaler www1und Remotewww2
find / var / www / html / -name "*" -exec md5sum -b {} \; | grep -v "/ var / www / html / exclude_this dir"> local.md5
ssh www2 "find / var / www / html / -name '*' -exec md5sum -b {} \; | grep -v / var / www / html / exclude_this dir> remote.md5"
scp www2: remote.md5.
diff local.md5 remote.md5 
user69366
quelle
3

Sie möchten wirklich die Leistung von rsynczur Reduzierung des Bandbreitenverbrauchs mit der Leistung kombinieren diff, Ihnen Flexibilität und Unterschiede zu bieten.

So etwas in der Art:

cp -R $local $bak
rsync $server:$remdir/* $local/
rsync $local/ $server:$remdir/* 
diff -wur $local $bak

Ich schätze, Sie könnten dies ein wenig optimieren, wenn Sie es oft rsyncanstatt cpin der ersten Zeile verwenden würden - offensichtlich haben Sie in der letzten Zeile die volle Kraft diff, es zu formatieren, wie Sie möchten. Wahrscheinlich mit y im OPs-Fall

Der Nachteil dieses Ansatzes ist, dass Sie am Ende doppelt so viel lokalen Raum nutzen, aber bei weniger als 1 USD / Gig, wen interessiert das?

ErichBSchulz
quelle
cp --reflink=auto --sparse=alwaysin Abhängigkeit von der zugrunde liegenden FS keinen Platz für die Kopie zu verwenden.
Tom Hale
1

Erledigen Sie die diff old_dir new_dir > diff.txtNebeneinanderunterschiede auf demselben Server.

Für entfernte Dateien:

Beispiel: ABC ist ein vorhandener Server und XYZ ist Ihr Remote-Server. Der Verzeichnisname lautet 123.

Schritt 1: Benennen Sie das vorhandene Verzeichnis 123 auf ABC Server in 123_ABC um.

ABC:/Home > mv 123 123_ABC

Schritt 2: Erstellen Sie ein neues Verzeichnis auf dem Server ABC:

ABC: > mkdir 123_XYZ

Schritt 3: Kopieren Sie alle Dateien aus dem Verzeichnis 123 auf dem XYZ-Server in das Verzeichnis 123_XYZ auf dem ABC-Server:

XYZ/123 > scp * userid@ABC: /123_XYZ

Dadurch werden alle Dateien aus dem Verzeichnis auf Ihrem XYZ-Server in Ihr ABC-Server / 123_XYZ-Verzeichnis kopiert.

Schritt: 4: Machen Sie den Unterschied zwischen beiden Verzeichnissen:

Gehen Sie nun zum ABC-Server und führen Sie einen Vergleich zwischen 123_ABC und 123_XYZ durch

ABC > diff 123_ABC 123_XYZ > diff.txt

Der obige Befehl speichert die Diff-Ergebnisse in der diff.txt im selben Pfad.

Sie können dann die Unterschiede vergleichen.

Vielen Dank,

Mehul

Mehul
quelle
0

AIDE Advanced Intrusion Detection Environment (AIDE) ist eine Dateiintegritätsprüfung für UNIX-Betriebssysteme. Sein Zweck ist die Bereitstellung von Berichten zur Integrität von Daten in unterstützten Dateisystemen. Indem Sie AIDE mehrmals auf dem Zielhost ausführen, können Sie feststellen, welche Dateien geändert werden. Indem Sie AIDE mehrmals auf verschiedenen Hosts ausführen, können Sie feststellen, welche Dateien und Berechtigungen unterschiedlich sind. Verwenden Sie dann ein GUI-Diff-Tool für die gemeldeten "verschiedenen" Dateien.

Oder verwenden Sie ein GUI-Diff-Tool wie meld, guiffy, kdiff3, diff, vimdiff, gvimdiff, Emacs, Kompare, Diffuse, Easydiff, TkDiff oder xxdiff. Die meisten werden zusätzlich zu den Datei-Unterschieden auch Verzeichnis-Unterschiede machen. Sie müssen das Remote-Laufwerk wie bereits erwähnt mit NFS, SMBFS oder SSHFS mounten.


quelle
0

Oder Sie können zwei Dateien mit der ausgegebenen Dateiliste verwenden. Und dann vergleichen Sie diese beiden Dateien. Beispielsweise:

/path/to/compare/remote$: ls > remote-files 

/path/to/compare/local$: ls > local-files 

Laden Sie eine der Dateien herunter.

-rw-r - r-- 1 1015 1015 26624 2005-06-14 13:10 FILE.TXT  

zu FILE.TXT

Verwenden Sie diff ( diff -y remote-files local-files > diff-files), um sie nebeneinander zu vergleichen. Öffne die Diff-Dateien und überprüfe sie. Jede Zeile mit> bedeutet eine andere Datei.

Mark Henderson
quelle