Ich möchte rsync verwenden, um Daten von einem Remote-Linux-Server auf meinem lokalen Mac zu sichern. Und ich möchte diesen Vorgang auf meinem lokalen Mac initialisieren. Alles funktioniert einwandfrei, außer dass es ein Sonderzeichenproblem gibt: Jedes Mal, wenn ich den rsync-Vorgang (nach der ersten Synchronisierung) erneut ausführe, werden die Dateien mit Sonderzeichen zuerst gelöscht und dann erneut synchronisiert. Soweit ich weiß, gibt es ein Problem mit verschiedenen Zeichensätzen, und die bevorzugte Lösung scheint darin zu bestehen, die --iconv
Option zu verwenden:
Sie können die Option --iconv von rsync verwenden, um zwischen UTF-8 NFC und NFD zu konvertieren, zumindest wenn Sie einen Mac verwenden. Es gibt einen speziellen utf-8-mac-Zeichensatz, der für UTF-8 NFD steht. Um Dateien von Ihrem Mac auf Ihr NAS zu kopieren, müssen Sie Folgendes ausführen:
rsync -a --iconv=utf-8-mac,utf-8 localdir/ mynas:remotedir/
Dadurch werden alle lokalen Dateinamen von UTF-8 NFD in UTF-8 NFC auf dem Remote-Server konvertiert. Der Inhalt der Dateien wird nicht beeinflusst.
Das Problem ist, dass dies für mich nur in eine Richtung funktioniert, nämlich beim Synchronisieren vom Mac unter Linux. Aber ich möchte "in die andere Richtung gehen", dh von der Linux-Maschine auf den Mac synchronisieren. Und ich möchte den Vorgang von meinem lokalen Mac aus initialisieren. Aber wenn ich es versuche:
rsync -av --delete --iconv=utf-8,utf-8-mac mynas:remotedir/ localdir/
Ich erhalte eine Fehlermeldung:
iconv_open("UTF-8", "utf-8-mac") failed
rsync error: requested action not supported (code 4) at rsync.c(118) [sender=3.0.9]
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [Receiver=3.1.1]
Ich kann nicht verstehen, warum dies nicht funktioniert. Meine rsync-Version auf dem Mac wurde von 2.6.9 aktualisiert. bis 3.1.1. mit Macports . Beachten Sie, dass der Vorgang dann funktioniert, wenn ich (auf dem Mac nota bene) eine Rsynchronisierung vom Mac nach Linux initiiere:
rsync -av --delete --iconv=utf-8-mac,utf-8 localdir/ mynas:remotedir/
Aber vom Mac in die andere Richtung zu gehen - was ich tun möchte - funktioniert nicht.
Seltsamerweise wird beim Testen zum Initiieren der Synchronisierung vom Linux-Computer diese seltsame Meldung angezeigt:
rsync: on remote machine: --iconv=UTF-8-MAC: unknown option
rsync error: syntax or usage error (code 1) at /SourceCache/rsync/rsync-45/rsync/main.c(1333) [server=2.6.9]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]
einschließlich der sehr seltsamen Behauptung [server=2.6.9]
, obwohl ich auf dem Mac auf 3.1.1 aktualisiert habe. Aus einigen Gründen sieht es so aus, als ob mein Linux-Computer nur die ursprüngliche rsync-Version auf dem Mac "sieht".
Irgendwelche Vorschläge, wie man das löst?
UPDATE 23. Oktober : Gemäß dem hervorragenden Vorschlag von @Lee Johnson (siehe unten) funktioniert das Initiieren der Synchronisierung vom Linux-Server jetzt. Der Vollständigkeit halber habe ich jetzt alle Kombinationen ausprobiert, und es ergibt sich ein interessantes Muster:
ON MAC:
ARBEITEN: Dateien von Mac zu Linux
FEHLER: Dateien von Linux auf Mac
AUF LINUX
WERKE: Dateien von Linux auf Mac
FEHLER: Dateien von Mac zu Linux
Mit anderen Worten, die --iconv
Option scheint nur in eine Richtung zu funktionieren, mit Dateien vom lokalen Computer auf die Fernbedienung, nicht umgekehrt. Es sieht für mich wie ein Fehler aus, aber vielleicht soll es so funktionieren?
Kann jemand Licht ins Dunkel bringen?
rsync
--rsync-path="/usr/local/bin/rsync"
.DS_Store
von Synchronisierungen ausgeschlossen und aus diesem Grund konnte OSX keine Verzeichnisse mit diesen Dateien löschen. Ich habe die Zeichensätze mit--iconv
, den rsync-Pfad auf dem Mac mit--rsync-path
(ich verwende Homebrew) eingerichtet und musste dann hinzufügen,--delete-excluded
damit die hartnäckigen Verzeichnisse gelöscht werden konnten.Antworten:
Nach vielen Experimenten und sehr aufgrund der hilfreichen Vorschläge von @Lee Johnson fand ich endlich die Lösung heraus, die mir jetzt peinlich offensichtlich erscheint. Aufgrund eines Kommentars, den ich bei der Untersuchung des Problems gelesen habe, dachte ich, Sie sollten den Zeichensatz in der Reihenfolge der Transformation angeben. aber es scheint, dass dies nicht die richtige Syntax ist. Vielmehr sollte man
IMMER
--iconv=utf-8-mac,utf-8
beim Initialisieren von rsync vom Mac und IMMER--iconv=utf-8,utf-8-mac
beim Initialisieren von rsync vom Linux-Computer verwenden, unabhängig davon, ob ich Dateien vom Mac oder Linux-Computer synchronisieren möchte.Dann funktioniert es wie Magie!
quelle
Haben Sie kürzlich ein Upgrade auf OS X Yosemite durchgeführt? Ich hatte das gleiche Problem, bevor ich mich daran erinnerte, dass ich / usr / bin / rsync mit Version 3.1 aktualisiert hatte. Beim Upgrade auf Yosemite wurde dieses durch die alte Version 2.6.9 ersetzt.
In meinem Fall habe ich das Problem auf dem Mac behoben, indem ich meinen 3.1-Rsync wieder in / usr / bin verknüpft habe:
quelle
--iconv
dies in 2.6.9 unterstützt wird; Selbst wenn rsync die Option nur zur Verarbeitung an den Remote-Host sendet, muss es die Option auf der OS X-Seite erkennen. Waswhich rsync; rsync --version
sagt Ihnen ein OS X-Terminal?--rsync-path=/opt/local/bin/rsync
, um Ihre bekannte 3.1.1-Version auf der Mac-Seite zu erhalten?