2009-10-21 26 views
45

Ich möchte rsync zu synchronisieren zwei Verzeichnisse in beiden Richtungen.RSync: Wie synchronisiere ich in beide Richtungen?

Ich beziehe mich auf die Synchronisation in klassischen Sinne (nicht, wie es in rsync Handbücher gemeint ist):
ich die Verzeichnisse in beide Richtungen, je nachdem, welche von ihnen neuere aktualisieren möchten.

Kann dies durch rsync (vorzugsweise in einer Linux-Art) getan werden?
Wenn nicht, welche anderen Lösungen gibt es?

+2

Ich glaube, das Löschen, dass in http://serverfault.com/ erhalten Sie bessere Antworten zu bekommen. – voyager

Antwort

43

Führen Sie es einfach zweimal aus, mit "neueren" Modus (-u oder --update Flag) plus -t (um die Zeit der Datei zu kopieren), -r (für rekursive Ordner) und -v (für ausführliche Ausgabe zu sehen, was es tut):

rsync -rtuv /path/to/dir_a/* /path/to/dir_b 
rsync -rtuv /path/to/dir_b/* /path/to/dir_a 

Dies wird nicht Löschungen handhaben, aber ich bin nicht sicher, ob es eine gute Lösung für dieses Problem nur mit periodischem sync'ing ist.

+1

Da es sich bei der Frage um rsync handelte, werde ich diese Antwort als korrekt markieren. –

+1

Aber du hast auch nach anderen Lösungen gefragt und Unison macht einen besseren Job, sonst hätte ich nie ein anderes Tool erwähnt. Ich verstehe, dass Sie vielleicht bestimmte Umstände haben, die den Einsatz von rsync begünstigen. – MaD70

+1

Sheesh, du bekommst 6 Upvotes und du klagst immer noch? Unison ist eine wirklich interessante Lösung, und ich bin froh, dass Sie es erwähnt haben. :) – jsight

45

Kennen Sie Unison File Synchronizer?

Unison ist ein Dateisynchronisationswerkzeug für Unix und Windows. Es erlaubt zwei Repliken einer Sammlung von Dateien und Verzeichnisse auf verschiedenen Hosts (oder verschiedenen Festplatten auf dem gleichen Host), modifizierte getrennt, und dann den neuesten Stand gebracht gespeichert werden, indem in jeder Replik die Änderungen ausbreitende das andere. ...

Beachten Sie auch, dass es elastisch zum Scheitern ist:

Unison ist elastisch zum Scheitern. Es ist vorsichtig, die Replikate und seine eigenen privaten Strukturen in einem vernünftigen Zustand zu jeder Zeit zu verlassen, auch im Falle von abnormalen Abschluss oder Kommunikationsfehler.

+0

+1. Unison ist der beste Weg, dies zu tun. Double-rsync ist schwer zu bekommen und behandelt keine Löschungen. – Avdi

+0

Ja, Unison ist fehlerresistent. Ich aktualisiere meine Antwort, um dies zu betonen. – MaD70

+2

Hatte nicht von Unison gehört. Sie sind dafür verantwortlich, dass ich meine Backup-Skripte heute zu Hause wiederherstellen muss. – voyager

4

Dank jsight

rsync -urv --progress dir_a dir_b && rsync -urv --progress dir_b dir_a 

Das in der zweiten Sync führen würde geschieht unmittelbar nach der ersten Synchronisierung beendet ist. Wenn die Verzeichnisstruktur groß ist, spart dies Zeit, da man nicht vor dem PC sitzen muss. Wenn die Struktur sehr groß ist, entfernen Sie die ausführliche und Fortschritt Sachen

rsync -ur dir_a dir_b && rsync -ur dir_b dir_a 
1

Verwenden rsync <OPTIONS> [hostname:]source-dir [hostname:]dest-dir

zum Beispiel:

rsync -pogtEtvr --progress --bwlimit=2000 xxx-files different-stuff 

Wird xxx-Dateien verschieden stuff/xxx-Dateien .Wenn synchronisieren different-stuff/xxx-files existiert nicht, es wird erstellt - also kopiert.

-pogtEtv - nur Reihe von Optionen Datei-Metadaten sowie v zu erhalten - die ausführliche und r - recursive

--progress - zeigt Fortschritt der Synchronisierung in Echtzeit - super nützlich, wenn Sie kopieren große Dateien

--bwlimit=2000 - legt die maximale Geschwindigkeit des Kopierens/Synchronisierens fest (bw = Bandbreite)

PS rsync ist von entscheidender Bedeutung, wenn Sie im Falle eines lokalen Computers über das Netzwerk arbeiten. Sie können Befehle wie cp verwenden.

Viel Glück!

-3

, wenn Sie in beide Richtungen synchronisieren möchten, und aktivieren auch Dateien Verwendung dieses folgenden Befehle

rsync -u -r --delete dir_a dir_b 
rsync -u -r --delete dir_b dir_a 
+2

Dadurch werden neue Dateien in dir_b gelöscht. Verwenden Sie dies nur, wenn 'dir_b' keine neuen Dateien erhält. Aber in diesem Fall ist das '--delete' im zweiten Befehl wahrscheinlich nutzlos. –

Verwandte Themen