Rsync mit Sonderzeichendateien funktioniert nicht zwischen Mac und Linux

Rsync mit Sonderzeichendateien funktioniert nicht zwischen Mac und Linux

Ich möchte rsync verwenden, um meinen Ubuntu-Server mit einer Festplatte auf einem Mac zu sichern. Aber ich bekomme es nicht richtig zum Laufen, da jedes Mal, wenn ich den rsync-Vorgang nach dem ersten Mal erneut ausführe, die Dateien mit Sonderzeichen zuerst gelöscht und dann erneut synchronisiert werden. Es scheint, als gäbe es ein Problem mit unterschiedlichen Zeichensätzen.

Derbevorzugte Lösungscheint die Verwendung der --iconvOption zu sein:

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 also etwas wie Folgendes ausführen:

rsync -a --iconv=utf-8-mac,utf-8 localdir/ mynas:remotedir/

Dadurch werden alle lokalen Dateinamen auf dem Remote-Server von UTF-8 NFD in UTF-8 NFC konvertiert. Der Inhalt der Dateien wird dadurch nicht beeinflusst.

Danke an @Jan, ichhabe meine rsync-Version auf meinem Mac aktualisiertvon 2.6.9. auf 3.1.1. Trotzdem bin ich noch nicht ganz am Ziel, da ich jetzt noch einen weiteren Fehler bekomme:

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 verstehe nicht, warum die „angeforderte Aktion nicht unterstützt“ angezeigt wird, da die Rsync-Version auf meinem Ubuntu (12.04) anscheinend höher als 3.xx ist und daher die --iconvOption unterstützen sollte.

BEARBEITEN: Ich möchte noch hinzufügen, dass alles wunderbar funktioniert, wenn ich (auf dem Mac, wohlgemerkt) ein rsync VOM Mac ZU Linux initiiere:

rsync -av --delete --iconv=utf-8-mac,utf-8 localdir/ mynas:remotedir/

Aber der umgekehrte Weg vom Mac aus funktioniert nicht. Seltsamerweise wird beim Versuch, rsync vom Linux-Rechner aus zu starten, diese seltsame Meldung ausgegeben:

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 irgendeinem Grund sieht es so aus, als ob mein Linux-Rechner auf dem Mac nur die ursprüngliche rsync-Version „sieht“.

Irgendwelche Vorschläge zur Lösung dieses Problems?

Antwort1

Die Lösung war peinlich einfach: Aufgrund eines Kommentars, den ich bei der Recherche des Problems gelesen habe, dachte ich, man müsse den Zeichensatz in der Reihenfolge der Transformation angeben; aber das scheint nicht die richtige Syntax zu sein. Vielmehr sollte manstetsverwenden Sie es --iconv=utf-8-mac,utf-8, wenn Sie rsync vom Mac aus initialisieren, undstetsVerwenden Sie es --iconv=utf-8,utf-8-mac, wenn Sie rsync vom Linux-Computer aus initialisieren, unabhängig davon, ob Sie Dateien vom Mac- oder Linux-Computer synchronisieren möchten.

Dann funktioniert es wie Magie!

EDIT: Tatsächlich ist es manchmal sinnvoll, die Manualpage genau zu überprüfen. Hier ist sie, schwarz auf weiß:

--iconv=CONVERT_SPEC
              Rsync  can  convert  filenames between character sets using this
              option.  Using a CONVERT_SPEC of "." tells rsync to look up  the
              default  character-set via the locale setting.  Alternately, you
              can fully specify what conversion to do by giving a local and  a
              remote   charset   separated   by   a   comma   in   the   order
              --iconv=LOCAL,REMOTE, e.g.  --iconv=utf8,iso88591.   This  order
              ensures  that the option will stay the same whether you're push-
              ing  or  pulling  files.

Antwort2

Ich kann bestätigen, dass das funktioniert, ich hatte das gleiche Problem. In meinem Fall war jede Datei mit einem Akzentzeichen auf dem Ziel nicht lesbar. Ich habe es erst entdeckt, als ich auf meinem Mac mit der Anwendung „Ordner vergleichen“ einen Ordnervergleich durchführte: https://itunes.apple.com/gb/app/compare-folders/id816042486?mt=12

Das obige --iconv=utf-8-mac,utf-8 wurde hinzugefügt und BOOM! rsync hat jede akzentuierte Datei durch eine neue ersetzt.

Um einige Informationen hinzuzufügen, da die obigen Links anscheinend nicht mehr funktionieren, installieren Sie Macports und führen Sie Folgendes aus, um rsync auf 3.1.2 zu aktualisieren: sudo port install rsync

Der Grund, warum der Remote-Server die Version 2.6.9 zurückgegeben hat, liegt darin, dass die alte Version tatsächlich noch vorhanden ist und der Remote-Server diese anstelle der neuen sieht.

Version 2.6.9 befindet sich in /usr/bin

verwandte Informationen