Rsync mit Sonderzeichendateien funktioniert nicht zwischen Mac und Linux


17

Ich möchte mit rsync meinen Ubuntu-Server mit einer Festplatte sichern, die sich auf einem Mac befindet. Es funktioniert jedoch nicht ordnungsgemäß, 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 verschiedenen Zeichensätzen.

Die bevorzugte Lösung scheint 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 Zeichensatz utf-8-mac, der für UTF-8 NFD steht. Um also Dateien von Ihrem Mac auf Ihren 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.

Dank @Jan habe ich meine rsync-Version von 2.6.9 auf meinem Mac aktualisiert. zu 3.1.1. Trotzdem bin ich noch nicht ganz da, da ich jetzt einen weiteren Fehler erhalte:

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 bin ratlos zu verstehen, warum "angeforderte Aktion nicht unterstützt", da es scheint, dass die rsync-Version auf meinem Ubuntu (12.04) nach 3.xx ist und daher die --iconvOption unterstützen sollte.

EDIT: Lassen Sie mich hinzufügen, dass, wenn ich (auf dem Mac, nota bene) eine rsync vom Mac nach Linux initiiere, alles wunderbar funktioniert:

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

Aber es funktioniert nicht, vom Mac aus in die andere Richtung zu gehen. Seltsamerweise rendert das Testen, um den Rsync vom Linux-Rechner aus zu starten, diese seltsame Meldung:

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 würde mein Linux-Rechner nur die ursprüngliche rsync-Version auf dem Mac sehen.

Irgendwelche Vorschläge, wie man das löst?

Antworten:


17

Die Lösung war peinlich einfach: 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 anscheinend ist das nicht die richtige syntax. Vielmehr sollte man immer verwenden, --iconv=utf-8-mac,utf-8wenn man den Rsync vom Mac aus initialisiert, und immer , --iconv=utf-8,utf-8-macwenn man den Rsync vom Linux-Computer aus initialisiert, egal ob ich Dateien vom Mac oder vom Linux-Computer synchronisieren möchte.

Dann funktioniert es wie Zauberei!

EDIT: In der Tat ist es manchmal eine gute Sache, die Handbuchseite genau zu überprüfen. Hier ist es, 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.

Ähm ... es passiert mir von Ubuntu bis Amazon S3 ...: |
Tom Roggero

Keine Ursache! AWS CLI hat es für mich behoben.
Tom Roggero

Weiß auf Schwarz;)
Hallo Welt

2

Ich kann bestätigen, dass dies funktioniert, ich hatte das gleiche Problem. In meinem Fall war eine Datei mit einem Akzentzeichen auf dem Ziel nicht lesbar. Ich habe es nur durch Ausführen eines Ordnervergleichs auf meinem Mac mithilfe der Anwendung "Ordner vergleichen" entdeckt: https://itunes.apple.com/gb/app/compare-folders/id816042486?mt=12

Die obigen Befehle --iconv = utf-8-mac, utf-8 und BOOM wurden hinzugefügt! rsync hat jede mit Akzenten versehene Datei durch eine neue ersetzt.

Um einige Informationen hinzuzufügen, da die oben genannten Links anscheinend nicht mehr funktionieren, führen Sie ein Upgrade von rsync auf 3.1.2 durch, installieren Sie Macports und führen Sie Folgendes aus: sudo port install rsync

Der Grund dafür, dass der Remoteserver die Version 2.6.9 zurückgibt, ist, dass die alte Version noch vorhanden ist und der Remoteserver diese Version anstelle der neuen Version anzeigt.

Version 2.6.9 befindet sich in / usr / bin

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.