Ich möchte rsync verwenden, um zwei Verzeichnisse in beide Richtungen zu synchronisieren .
Ich beziehe mich auf die Synchronisation im klassischen Sinne ( nicht wie es in rsync-Handbüchern gemeint ist):
Ich möchte die Verzeichnisse in beide Richtungen aktualisieren , je nachdem, welches davon neuer ist .
Kann dies mit rsync erfolgen (vorzugsweise auf Linux-Weise) ?
Wenn nicht, welche anderen Lösungen gibt es?
Antworten:
Führen Sie es einfach zweimal aus, mit dem "neueren" Modus (-u oder --update flag) plus -t (zum Kopieren der Änderungszeit der Datei), -r (für rekursive Ordner) und -v (für die ausführliche Ausgabe, um zu sehen, was es ist tun):
Löschvorgänge werden hiermit nicht behandelt, aber ich bin mir nicht sicher, ob es eine gute Lösung für dieses Problem gibt, wenn nur regelmäßig synchronisiert wird.
quelle
Kennen Sie Unison File Synchronizer ?
Beachten Sie auch, dass es ausfallsicher ist:
quelle
Sie müssen
rsync
zweimal ausführen, und ich empfehle, es auszuführen mit-au
:-a
(a für Archiv) ist eine Verknüpfung für-rlptgoD
:-r
In Unterverzeichnisse zurückgreifen-l
Synchronisieren Sie auch symbolische Links-p
Synchronisieren Sie auch Dateiberechtigungen-t
Synchronisieren Sie auch die Änderungszeiten der Dateien-g
Synchronisieren Sie auch Dateigruppen-o
Synchronisieren Sie auch den Dateibesitzer-D
Synchronisieren Sie auch spezielle (nicht reguläre / Meta) DateienGrundsätzlich sollten Sie immer dann, wenn Sie eine identische Eins-zu-Eins-Kopie mit erstellen möchten, diese
rsync
verwenden,-a
da dies die meisten Benutzer erwarten, wenn sie über " Synchronisierung " sprechen . Andere Antworten hier scheinen zu übersehen, dass der Inhalt einer Datei manchmal unverändert bleibt, sich jedoch möglicherweise der Eigentümer oder die Zugriffsberechtigungen geändert haben, und in diesem Fallrsync
die Datei nicht synchronisiert werden, was schwerwiegend sein könnte.Sie müssen jedoch auch angeben
-u
, dassrsync
alle Dateien / Ordner vollständig in Ruhe gelassen werden sollen, falls sie bereits am Ziel vorhanden sind und ein neueres Datum für die letzte Änderung haben. Ohne-u
rsync
würde synchronisieren, unabhängig davon, ob eine Datei / ein Ordner neuer ist oder nicht .Bitte beachten Sie, dass diese Lösung gelöschte Dateien nicht verarbeiten kann. Das Behandeln von Löschvorgängen ist unter Berücksichtigung der folgenden Situation nicht einfach möglich: Eine Datei wurde an der Quelle gelöscht. Wie soll nun festgestellt werden
rsync
, ob diese Datei einmal vorhanden und gelöscht wurde (in diesem Fall muss sie auch am Zielort gelöscht werden) oder ob Es war nie an der Quelle vorhanden (in diesem Fall muss es vom Ziel kopiert werden). Diese beiden Situationen sehen identisch ausrsync
und können daher nicht richtig reagieren. Es hilft nicht, umgekehrt zu synchronisieren, da dies zu derselben Situation führen kann: Eine Datei ist an der Quelle vorhanden, jedoch nicht am Ziel. Warum? Hat es am Zielort noch nie existiert oder wurde es gelöscht? Beide Fälle sehen identisch aus mitrsync
.Synchronisierungstools, mit denen gelöschte Dateien zuverlässig synchronisiert werden können, verwalten normalerweise ein Synchronisierungsprotokoll über alle früheren Synchronisierungsvorgänge. Wenn aus diesem Protokoll hervorgeht, dass einmal eine Datei vorhanden war und synchronisiert wurde, diese aber jetzt fehlt, ist klar, dass sie gelöscht wurde. Wenn es laut Protokoll nie eine solche Datei gab, muss sie synchronisiert werden. Durch das Speichern aller Protokolleinträge mit Zeitstempeln ist es sogar möglich, dass eine gelöschte Datei zurückkommt und mehrmals gelöscht wird. Das Synchronisierungstool weiß jedoch immer, was zu tun ist, und das Ergebnis ist immer korrekt.
rsync
hat kein solches Protokoll, es stützt sich nur auf den aktuellen Dateistatus von zwei Seiten des Vorgangs.Sie können sich jedoch selbst einen Synchronisierungsbefehl mit
rsync
und ein wenig POSIX-Shell-Scripting erstellen , das einem Synchronisierungstool wie oben beschrieben bereits sehr nahe kommt. Da ich selbst ein solches Tool benötigte, finden Sie hier eine Antwort auf Stackoverflow , die Sie durch die Erstellung eines solchen Skripts führt.quelle
Danke jsight
Dies würde dazu führen, dass die zweite Synchronisierung unmittelbar nach dem Ende der ersten Synchronisierung erfolgt. Wenn die Verzeichnisstruktur sehr groß ist, spart dies Zeit, da man nicht vor dem PC sitzen muss. Wenn die Struktur sehr groß ist, entfernen Sie das ausführliche und fortschreitende Material
quelle
&&
zwischen den beiden Befehlen den 2. Befehl unmittelbar nach dem 1. Befehl automatisch ausführen können (wenn der 1. Befehl erfolgreich ist), anstatt ihn manuell nacheinander auszuführen in der Antwort von @ jsight. Ich denke auch, dass die Antwort von @ jsight so bearbeitet wurde, dass sie die-t
Option enthält, nachdem diese Antwort veröffentlicht wurde.Verwenden
rsync <OPTIONS> [hostname:]source-dir [hostname:]dest-dir
zum Beispiel:
Synchronisiert xxx-Dateien mit verschiedenen / xxx-Dateien. Wenn verschiedene / xxx-Dateien nicht vorhanden waren, wird sie erstellt - dh kopiert.
-pogtEtv
- Nur eine Reihe von Optionen zum Beibehalten von Dateimetadaten sowie v - ausführlich und r - rekursiv--progress
- Zeigt den Fortschritt der Synchronisierung in Echtzeit an - sehr nützlich, wenn Sie große Dateien kopieren--bwlimit=2000
- legt die maximale Kopier- / Synchronisierungsgeschwindigkeit fest (bw = Bandbreite)PS rsync ist von entscheidender Bedeutung, wenn Sie über ein Netzwerk arbeiten. Bei lokalen Computern können Sie Befehle wie cp verwenden .
Viel Glück!
quelle
Ich benutze
rsync
mitinotifywait
. Wenn Sie eine Datei ändern,rsync
wird ausgeführt.Sie müssen
inotifywait
auf beiden Hosts ausgeführt werden. Bitte überprüfen Sie das Beispiel inotifywaitquelle
Was Sie brauchen, ist Rclone . Rclone ("rsync for cloud storage") ist ein Linux-Befehlszeilenprogramm zum Synchronisieren von Dateien und Verzeichnissen mit und von verschiedenen Cloud-Speicheranbietern (Box, Dropbox, FTP usw.) und lokalen Dateisystemen. Rlone unterstützt nur die Spiegelsynchronisierung.
Eine andere grafischere Lösung, die eine Echtzeitsynchronisierung umfasst, wäre die Verwendung von FreeFileSync , das das Programm RealTimeSync enthält. FreefileSync unterstützt bidirektionale bidirektionale Synchronisierung, einschließlich der Behandlung von Löschvorgängen.
quelle