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 --iconv
Option 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 --iconv
Option 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