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 Sync-Musik mache, werden zuerst alle Unterschiede von Server zu lokal und dann das Gegenteil abgerufen, wobei alle Unterschiede von lokal zu Server gesendet werden.
Dies funktioniert nur sehr gut, wenn es in Zukunft nur Updates oder neue Dateien gibt. Wenn es Löschungen gibt, macht es nichts.
In rsync gibt es die Optionen --delete und --delete-after, um das zu erreichen, was ich will, aber die Sache ist, dass es bei einer 2-Wege-Synchronisierung nicht funktioniert.
Wenn ich Serverdateien auf einer Synchronisierung löschen möchte, wenn lokale Dateien gelöscht wurden, funktioniert dies, aber wenn ich aus irgendeinem Grund (nachfolgend erläutert) einige Dateien habe, die nicht auf dem Server sind, aber lokal vorhanden sind und gelöscht wurden, Ich möchte sie lokal entfernen und nicht vom Server kopieren (wie es passiert).
Ich habe 3 Maschinen im Kontext:
- Desktop
- Notizbuch
- Heimserver
Manchmal hat der Server also Dateien, die beispielsweise mit einer Notebook-Synchronisierung 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 Verfolgung der Operationen möglich: P.
Einfachere Lösungen? Danke dir.
Antworten:
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 Vorgang jedoch automatisieren, indem Sie Folgendes verwenden, das Standardoptionen (ohne Konflikte) akzeptiert:
unison -auto dirA/ dirB/
unison -batch dirA/ dirB/
stellt überhaupt keine Fragen und schreibt, um auszugeben, wie viele Dateien ignoriert wurden (weil sie in Konflikt standen).quelle
:)
Sie können auch Bitpocket ausprobieren: https://github.com/sickill/bitpocket
quelle
Sie können Osync verwenden: http://www.netpower.fr/osync , das auf rsync mit intelligenter Löschausbreitung basiert. Es gibt auch mehrere Optionen wie die Wiederaufnahme einer angehaltenen Ausführung, das weiche Löschen und die Zeitsteuerung.
quelle
Da die ursprüngliche Frage auch einen Desktop und einen Laptop sowie ein Beispiel für Musikdateien umfasst (daher verwendet er wahrscheinlich eine grafische Benutzeroberfläche), würde ich auch eines der besten bidirektionalen, plattformübergreifenden, kostenlosen und Open-Source-Programme erwähnen : FreeFileSync .
Es ist GUI-basiert, sehr schnell und intuitiv, bietet Filterung und viele andere Optionen, einschließlich der Möglichkeit, eine Remoteverbindung herzustellen, "Kollisionen" anzuzeigen und interaktiv zu verwalten (z. B. Dateien mit ähnlichen Zeitstempeln) und zwischen bidirektionaler Übertragung, Spiegelung und zu wechseln demnächst.
quelle
Versuche dies,
Ich teste das einfach und es hat bei mir funktioniert. Ich führe eine bidirektionale Synchronisierung zwischen Windows7 (unter Verwendung von Cygwin mit installiertem rsync-Paket) und FreeNAS-Dateiserver (FreeNAS läuft unter FreeBSD mit vorinstalliertem rsync-Paket) durch.
quelle
-u
Überspringt neuere Dateien am Ziel, aber rsync kann das Alter eines Löschvorgangs nicht verfolgen. Wie kann dieses Skript also unterscheiden, ob eine lokale Datei neu ist (und beibehalten werden sollte) oder alt ist (und gelöscht werden sollte)? ? Oder verstehe ich falsch?--delete-excluded
löschen Sie alle Dateien , die auf Zielverzeichnisse existieren , aber nicht Quellverzeichnisse? Ich dachte, Sie--exclude=<filename>
müssten definieren, damit rsync nicht nur diese Ausschlüsse löscht? Oder behandelt rsync alle Nicht-Quellverzeichnisdateien als "ausgeschlossen"?--delete-excluded
dem ausgeführt wird Server als Quelle zuerst: Dateien lokal hinzugefügt werden gelöscht während dieses Laufes (während Dateien auf den zusätzlichen Server werden auf das lokale Ziel kopiert). Die einzigen lokalen Dateien, die wieder mit dem Server synchronisiert werden, sind Dateien, die ebenfalls auf dem Server vorhanden sind und lokal geändert wurden (in jüngerer Zeit als die Serverversionen) - was im OP-Szenario nicht wahrscheinlich ist. Wie Sie andeuten, kann eine echte 2-Wege-Synchronisierung nicht durchgeführt werdenrsync
, da das Speichern des Status zwischen den Läufen erforderlich ist.Sie könnten csync ausprobieren , es ist die Sync-Engine unter der Haube von owncloud .
quelle
Ich verwende jetzt SparkleShare https://www.sparkleshare.org/
funktioniert unter Mac, Linux und Windows.
quelle
Ich bin nicht sicher, ob es mit zwei Synchronisierungen funktioniert, aber damit --delete funktioniert, müssen Sie auch den Parameter --recursive hinzufügen.
quelle
--recurse
ist-r
, die die OP wird unter Verwendung von (in Druckoptionen Gruppe eingebettet-avzru
).Sie können Cloudsync verwenden , um einen Ordner mit einer Fernbedienung synchron zu halten:
Wenn die Fernbedienung NFS ist, können Sie Folgendes verwenden:
quelle
Rclone ist das, wonach 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 zuvor als Swiftsync bekannt und ist seit 2013 verfügbar.
quelle