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?
.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.
rsync
--rsync-path="/usr/local/bin/rsync"