Wie meinst du für Verzeichnisse, könnte immer Katze mit ls ersetzen
Kyle Brandt
27
Ich vermute, dass "für Verzeichnisse" bedeutet, einen rekursiven Diff zu machen
Ian Clelland
9
Ich stellte fest, dass diese Technik bei mir nicht funktionierte, wenn mein Remote-Host ein Passwort benötigte. Die Kennwortabfrage schien mit der Umleitung nicht gut zu funktionieren und konnte nicht erfolgreich abgeschlossen werden. Wenn Sie SSH-Schlüssel verwenden, sollte dies kein Problem sein.
Adam Franco
2
Dies ist eine großartige allgemeine Lösung für viele Probleme. Anstelle von 'cat foo' kann auch 'find / foo / bar -type f | während die Datei gelesen wird; mache ein Echo "**** $ file"; cat "$ file"; getan 'und Sie hätten eine Liste der Dateinamen und Dateiinhalte zu unterscheiden.
Paul Gear
106
Endlich habe ich eine tolle Lösung gefunden: vimdiff
Hier ist ein Beispiel: vimdiff .bash_profile scp: //[email protected]//home/vaibhavc/.bash_profile
vaichidrewar
4
2 Schrägstriche //nach dem remotehostist wichtig. Einzelne Schrägstrich wird nicht funktionieren
Lee Chee Kiam
2
Wenn Sie auf dem Remote-Host einen anderen Benutzernamen haben als auf Ihrem aktuellen Host, würden Sievimdiff /path/to/file scp://username@remotehost//path/to/file
JaredC
Wie können Sie dies mit zwei Remote-Hosts mit id_rsa Schlüsseldateien @JaredC tun?
Manatax,
61
Wenn Sie nur sehen möchten, welche Dateien sich unterscheiden, anstatt sich von den tatsächlichen Dateien zu unterscheiden, können Sie sie verwenden rsync --dry-run
Wenn meine Bearbeitung nicht funktioniert: Diese Methode ist der gewählten Antwort überlegen, da sie mit Makefiles funktioniert.
Chris Redford
@ Steve Dickinson - was meinst du mit "es funktioniert innerhalb von Makefiles"?
Martin Vegter
1
Dies ist auch eine gute Lösung, wenn Sie wie ich an einer Vim-Allergie leiden. :) Ich habe ein Bash-Skript erstellt, das dieselbe Datei auf zwei verschiedenen Hosts vergleicht. Dies ist nützlich, wenn Dienste zwischen Computern migriert und Konfigurationsdateien verglichen werden. Siehe gist.github.com/jhqv/dbd59f5838ae8c83f736bfe951bd80ff
Janek
10
Verwenden Sie scp, um die Dateien auf einen gemeinsamen Rechner zu bringen und dort zu vergleichen?
Oder, wenn Sie nur wissen wollen , ob die Dateien sind unterschiedlich oder nicht, hash sie mit md5sum auf jeder Maschine.
Sie könnten auch so etwas wie SSHFS untersuchen , aber ich weiß nicht, wie gut ein Algorithmus wie diff darüber abschneidet.
diff ist normalerweise eine einmalige Aktion, um Konfigurationsunterschiede zu überprüfen. Das Mounten des Dateisystems ist jedes Mal möglich, aber nicht praktisch. Ich würde besser Teer und Scp.
Alexey Timanovsky
3
Sie können den rsyncTrockenlaufmodus verwenden, wie in einer anderen Antwort kurz vorgeschlagen . Es werden alle Dateien aufgelistet, die unterschiedlich sind.
Verwenden Sie dazu die rvncOptionen ( r= rekursiv, v= ausführlich, n= Probelauf, c= Prüfsumme). Im rsyncPull-Modus ( rsync [OPTION...] [USER@]HOST:SRC... [DEST]) ist ein Beispiel:
Ich habe SFTP für den Remote-Server verwendet und bei Aufforderung meinen Benutzernamen / pwd eingegeben. Dann habe ich das Verzeichnis verwendet, das im Verzeichnis .gvfs in meinem Ausgangsverzeichnis im Befehl diff erstellt wurde.
diff -r --brief / home / benutzer dir / .gvfs / SFTP \ on \ freenas.local / pfad zu dir / dir1 / pfad zu lokalem dir / dir2
Verwenden Sie sshfs, die über ssh eingehängt sind. Es wird nicht allzu schnell sein, aber Sie können Ihre gesamte Tool-Suite verwenden, die davon ausgeht, dass sich alles auf einem lokalen Dateisystem befindet. Eine Alternative ist NFS über einen Tunnel, der mit "ssh -w" erstellt wurde (oder andere Kommunikationen, bei denen ssh keine Einschränkung darstellt).
rsync -ani --delete / root@remotehost:/
aber die vollständige Antwort gibt mehr Details.Antworten:
Sie können dies mit der Prozessersetzung von Bash tun :
Oder, wenn sich beide auf Remote-Servern befinden:
quelle
Endlich habe ich eine tolle Lösung gefunden: vimdiff
dank http://linux.spiney.org/remote_diff_with_vim_and_ssh siehe auch http://www.vim.org/scripts/script.php?script_id=1075 .
quelle
//
nach demremotehost
ist wichtig. Einzelne Schrägstrich wird nicht funktionierenvimdiff /path/to/file scp://username@remotehost//path/to/file
Wenn Sie nur sehen möchten, welche Dateien sich unterscheiden, anstatt sich von den tatsächlichen Dateien zu unterscheiden, können Sie sie verwenden
rsync --dry-run
quelle
Hier ist ein weiteres schnelles und schmutziges Befehlszeilenrezept. Anders als die gewählte Antwort funktioniert es in Makefiles:
quelle
Verwenden Sie scp, um die Dateien auf einen gemeinsamen Rechner zu bringen und dort zu vergleichen?
Oder, wenn Sie nur wissen wollen , ob die Dateien sind unterschiedlich oder nicht, hash sie mit md5sum auf jeder Maschine.
Sie könnten auch so etwas wie SSHFS untersuchen , aber ich weiß nicht, wie gut ein Algorithmus wie diff darüber abschneidet.
quelle
rsync --dry-run
.Eine Möglichkeit, wenn es auf Ihrem System möglich ist, besteht darin, das entfernte Dateisystem einfach mit sshfs einzuhängen .
quelle
Sie können den
rsync
Trockenlaufmodus verwenden, wie in einer anderen Antwort kurz vorgeschlagen . Es werden alle Dateien aufgelistet, die unterschiedlich sind.Verwenden Sie dazu die
rvnc
Optionen (r
= rekursiv,v
= ausführlich,n
= Probelauf,c
= Prüfsumme). Imrsync
Pull-Modus (rsync [OPTION...] [USER@]HOST:SRC... [DEST]
) ist ein Beispiel:Denken Sie daran , dass dies keine Informationen darüber liefert, ob die lokale oder die entfernte Datei neuer ist. Nur wenn sie sich unterscheiden.
quelle
Erstellen Sie auf Ihrem lokalen Computer eine rekursive Kopie des Verzeichnisses, das Sie unterscheiden möchten. Zum Beispiel:
Verwenden Sie rsync, um das Remote-Verzeichnis über die lokale Kopie zu replizieren:
Verwenden Sie diff, um den Unterschied zwischen dem lokalen Verzeichnis und dem lokalen Replikat des Remote-Verzeichnisses zu ermitteln:
quelle
Wenn Sie sshfs haben und Verzeichnisse unterscheiden müssen:
quelle
Hier ist, wie ich es gemacht habe.
Ich habe SFTP für den Remote-Server verwendet und bei Aufforderung meinen Benutzernamen / pwd eingegeben. Dann habe ich das Verzeichnis verwendet, das im Verzeichnis .gvfs in meinem Ausgangsverzeichnis im Befehl diff erstellt wurde.
diff -r --brief / home / benutzer dir / .gvfs / SFTP \ on \ freenas.local / pfad zu dir / dir1 / pfad zu lokalem dir / dir2
quelle
Dies ist ein Skript, mit dessen Hilfe lokale Ordner und Remote-Ordner unterschieden werden können:
quelle
http://myfedora.co.za/2012/04/diff-two-remote-file-systems/
diff <(/ usr / bin / ssh [email protected] 'ls / opt / lib /') <(/ usr / bin / ssh [email protected] 'ls / tmp /') | grep -i ">" | sed 's /> // g'
quelle
Verwenden Sie sshfs, die über ssh eingehängt sind. Es wird nicht allzu schnell sein, aber Sie können Ihre gesamte Tool-Suite verwenden, die davon ausgeht, dass sich alles auf einem lokalen Dateisystem befindet. Eine Alternative ist NFS über einen Tunnel, der mit "ssh -w" erstellt wurde (oder andere Kommunikationen, bei denen ssh keine Einschränkung darstellt).
quelle
Sie können auch versuchen, den Ansatz zu verallgemeinern, indem Sie eine Bash-Funktion erstellen, möglicherweise in Ihrem ~ / .bashrc:
dann rufe es mit einem Konstrukt wie:
Wenn Sie diff mit -s aufrufen, wird auch gemeldet, ob die Dateien identisch sind.
Prost! Jim
quelle