it-swarm.com.de

Zwei-Wege-Synchronisation mit rsync

Ich habe einen Ordner a/und einen Remote-Ordner A /. Ich führe jetzt so etwas auf einem Makefile aus:

get-music:
 rsync -avzru server:/media/10001/music/ /media/Incoming/music/

put-music:
 rsync -avzru /media/Incoming/music/ server:/media/10001/music/

sync-music: get-music put-music

wenn ich Synchronmusik mache, werden zuerst alle Unterschiede vom Server zum lokalen und dann umgekehrt abgerufen, wobei alle Unterschiede vom lokalen zum Server gesendet werden.

Dies funktioniert nur dann sehr gut, wenn es in der Zukunft nur Aktualisierungen oder neue Dateien gibt. Wenn es Löschungen gibt, tut es nichts.

In rsync gibt es die Optionen --delete und --delete-after, um das zu erreichen, was ich möchte, aber es funktioniert nicht bei einer 2-Wege-Synchronisation.

Wenn ich Serverdateien auf einer Synchronisation löschen möchte, wenn lokale Dateien gelöscht wurden, funktioniert dies. Wenn jedoch aus irgendeinem Grund (wie nachstehend erläutert) einige Dateien nicht auf dem Server vorhanden sind, sondern lokal vorhanden sind und gelöscht wurden, Ich möchte, dass sie lokal entfernt und nicht vom Server kopiert werden (wie es passiert).

Ich habe 3 Maschinen im Kontext:

  1. desktop
  2. notizbuch
  3. heimserver

Manchmal hat der Server Dateien, die beispielsweise mit einer Notizbuchsynchronisierung gelöscht wurden. Wenn ich dann eine Synchronisierung mit meinem Desktop durchführe (auf dem die gelöschten Serverdateien noch vorhanden sind), möchte ich, dass diese Dateien gelöscht werden und nicht erneut auf den Server kopiert.

Ich denke, dies ist nur mit einer Datenbank und einer Übersicht über die Operationen möglich: P

Irgendwelche einfacheren Lösungen? Vielen Dank.

90
mwm

Versuchen Sie es mit Unison: http://www.cis.upenn.edu/~bcpierce/unison/

Syntax: unison dirA/ dirB/

Unison fragt, was zu tun ist, wenn Dateien unterschiedlich sind. Sie können den Prozess jedoch automatisieren, indem Sie die folgenden Optionen verwenden, die Standardoptionen (nicht in Konflikt stehende Optionen) akzeptieren:

unison -auto dirA/ dirB/

unison -batch dirA/ dirB/ stellt überhaupt keine Fragen und schreibt, um auszugeben, wie viele Dateien ignoriert wurden (weil ein Konflikt aufgetreten ist).

61
alex

Sie können auch bitpocket ausprobieren: https://github.com/sickill/bitpocket

8
saif

Versuche dies,

get-music:
 rsync -avzru --delete-excluded server:/media/10001/music/ /media/Incoming/music/

put-music:
 rsync -avzru --delete-excluded /media/Incoming/music/ server:/media/10001/music/

sync-music: get-music put-music

Ich teste das einfach und es hat bei mir funktioniert. Ich führe eine 2-Wege-Synchronisation zwischen Windows7 (unter Verwendung von cygwin mit dem installierten rsync-Paket) und dem FreeNAS-Dateiserver durch (FreeNAS läuft unter FreeBSD mit dem vorinstallierten rsync-Paket).

6
Chris Collins

Möglicherweise verwenden Sie Osync: http://www.netpower.fr/osync , das auf rsync mit intelligenter Löschpropagierung basiert. Darüber hinaus stehen mehrere Optionen zur Verfügung, z. B. die Wiederaufnahme einer angehaltenen Ausführung, das vorläufige Löschen und die Zeitsteuerung.

5
Orsiris de Jong

Da es sich bei der ursprünglichen Frage auch um einen Desktop und einen Laptop sowie ein Beispiel mit Musikdateien handelt (daher verwendet er wahrscheinlich eine grafische Benutzeroberfläche), möchte ich auch eines der besten bidirektionalen, plattformübergreifenden, kostenlosen und Open-Source-Programme erwähnen: FreeFileSync .

Es ist GUI-basiert, sehr schnell und intuitiv, mit Filtern und vielen anderen Optionen ausgestattet, einschließlich der Möglichkeit, eine Remote-Verbindung herzustellen, "Kollisionen" (z. B. Dateien mit ähnlichen Zeitstempeln) anzuzeigen und interaktiv zu verwalten und zwischen bidirektionaler Übertragung, Spiegelung und zu wechseln bald.

4
Dario Fumagalli

Sie könnten versuchen csync , es ist die Sync-Engine unter der Haube von owncloud .

3
marton78

Ich verwende jetzt SparkleShare https://www.sparkleshare.org/

funktioniert unter Mac, Linux und Windows.

1
mwm

Ich bin nicht sicher, ob es mit zwei Synchronisierungen funktioniert, aber damit --delete funktioniert, müssen Sie auch den Parameter --recursive hinzufügen.

0
Boardy

Rclone ist was Sie suchen. Rclone ("rsync for cloud storage") ist ein Befehlszeilenprogramm zum Synchronisieren von Dateien und Verzeichnissen mit und von verschiedenen Cloud-Speicheranbietern, einschließlich lokaler Dateisysteme. Rclone war früher als Swiftsync bekannt und ist seit 2013 erhältlich.

0
user1461607