Sie müssen rsync
zweimal ausführen, und ich empfehle, es auszuführen mit -au
:
rsync -au /local/source/* /remote/destination
rsync -au /remote/destination/* /local/source
-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) Dateien
Grundsä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
, dass rsync
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 aus rsync
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 mit rsync
.
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.