Synchronisieren Sie ein lokales Verzeichnis mit einem Remote-Verzeichnis unter Linux

14

Ich habe einen Ordner mit ein paar Dateien und etwas Platz auf einem Webserver. Ich möchte eine bidirektionale Synchronisation zwischen dem lokalen und dem entfernten Ordner unter Linux durchführen, nur zum Zeitpunkt der Änderung. Wie mache ich das? Übrigens kann ich nichts auf dem Server installieren, es ist in jeder Hinsicht nur Platz.

Hinweis: Ich habe bereits RSA-Schlüsselpaare eingerichtet, sodass dies im Hintergrund geschehen kann.

Andrew Redd
quelle

Antworten:

12

Das Werkzeug der Wahl für die unidirektionale Synchronisation ist rsync, und das Werkzeug der Wahl für die bidirektionale Synchronisation ist Unison . In beiden Fällen muss die ausführbare Datei auf beiden Seiten verfügbar sein. Wenn Sie eine Datei auf dem Server ausführbar machen können, löschen Sie die unisono-Binärdatei und machen Sie sie ausführbar.

Wenn Sie Linux, * BSD, Solaris oder Mac OS X lokal haben, können Sie wahrscheinlich ein FUSE- Dateisystem verwenden, um den Web-Server-Speicherplatz als lokales Dateisystem anzuzeigen - sshfs sollte funktionieren, da Sie anscheinend über ssh-Zugriff verfügen. Dann verwenden Sie unisono "lokal".

Beachten Sie auch, dass die meisten Versionskontrollsoftware (CVS / Subversion sowie verteiltes VCS) eine Synchronisierung als Nebenfunktion haben (Einchecken auf einem Computer und Auschecken auf dem anderen Computer).

Gilles 'SO - hör auf böse zu sein'
quelle
4

Wenn es auf dem Server installiert ist, verwenden Sie rsynces für genau diesen Job.

So erhalten Sie die bidirektionale Übertragung :

Um in zwei Richtungen ein Verzeichnis synchronisieren /src/fooauf hostAzu /dest/fooauf hostB, einschließlich aller Unterverzeichnisse, können Sie diese Befehle ausführen würde hostA:

rsync -auz /src/foo hostB:/dest 
rsync -auz hostB:/dest/foo /src

Der erste Befehl wird alle Dateien , die neuer sind auf hostAzu hostB.

Der zweite Befehl wird alle Dateien ziehen , die auf neuere sind hostBzu hostA. Die kritischen Optionen sind:

Beim Kopieren müssen Sie die Änderungszeiten der Dateien einhalten. -atut dies und andere Dinge;

Wenn Sie nur die Änderungszeiten beibehalten möchten, verwenden Sie -tstattdessen.

Um alle Dateien zu überspringen , die auf dem Ziel neuer sind: -utut dies.

tante
quelle
soweit ich gelesen habe macht rsync nicht bidirektional und wenn ich es versuche gibt es mir die Fehlermeldung "Protokollversion stimmt nicht überein - ist deine Shell sauber?"
Andrew Redd
hostanswers.net/linux-hosting/rsync-protocol-version-mismatch kann Ihnen dabei helfen, das Versionskonflikt zu beheben. Für die bidirektionale Sache habe ich meine Antwort aktualisiert.
Tante
1
Rsync ist überhaupt nicht für die bidirektionale Synchronisation geeignet. Zum einen warnt es Sie nicht, wenn ein Konflikt vorliegt. Verwenden Sie stattdessen Unison, es ist das richtige Werkzeug für den Job.
Gilles 'SO - hör auf, böse zu sein'
1
Dies funktioniert fürchterlich, wenn Server A künftig von Server B getrennt wird. In meinem Fall bin ich dem Remoteserver 13 Stunden voraus.
Tim Post
1

Jedes Mal, wenn Sie eine Synchronisierung zwischen zwei Ordnern benötigen, rsyncist dies eine flexible Wahl. Das Problem ist, dass rsync das FTP-Protokoll nicht unterstützt. Ein guter Workaround dafür ist curlFtpFS :

CurlFtpFS ist ein Dateisystem für den Zugriff auf FTP-Hosts, das auf FUSE und libcurl basiert.

Mit curlFtpFs ist es ziemlich einfach, einen Remote-FTP-Ordner in Ihr Dateisystem aufzunehmen.

Dies ist ein kurzes Beispiel, das die Verwendung beider Tools zeigt:

curlftpfs -r -s ftp.foobar.com /foo
rsync -a /foo/ /bar
umount /foo

Lesen Sie die Manpage für weitere Informationen.

Wenn Sie keine solchen Anstrengungen unternehmen möchten, um curlFtpFS zu installieren, und nur einige Dateien synchron halten möchten, gibt es viele FTP-Tools, die solche Synchronisierungsfunktionen bieten:

  • FTPSync.pl - einfaches PERL-Skript, um ein lokales und ein fernes Verzeichnis synchron zu halten
  • weex - ein nicht interaktiver FTP-Client zum Aktualisieren von Webseiten
  • filezilla - GUI FTP-Client mit vielen Funktionen
  • ...
Echox
quelle
1. Rsync ist nicht für die bidirektionale Synchronisation geeignet. Verwenden Sie stattdessen Unison. 2. Woher kam FTP? Die Erwähnung von RSA-Schlüsseln in der Frage deutet eher auf ssh (und damit auf sshfs) hin.
Gilles 'SO - hör auf, böse zu sein'
Sie haben Recht, FTP wird in der Frage nicht erwähnt. Um ehrlich zu sein, denke ich, es war eine Kombination aus "Webspace" und "Es ist nur Raum". und ein bisschen von meiner Müdigkeit gestern.
Echox