Rsync avec des fichiers de caractères spéciaux ne fonctionnant pas entre Mac et Linux

18

Je veux utiliser rsync pour sauvegarder mon serveur Ubuntu avec un disque résidant sur un Mac. Mais je ne le fais pas fonctionner correctement, car chaque fois que je réexécute l'opération rsync après l'heure initiale, les fichiers avec des caractères spéciaux sont d'abord supprimés puis resynchronisés. Il semble qu'il y ait un problème avec différents jeux de caractères.

La solution préférée semble être d'utiliser l' --iconvoption:

Vous pouvez utiliser l'option --iconv de rsync pour convertir entre UTF-8 NFC et NFD, au moins si vous êtes sur un Mac. Il existe un jeu de caractères spécial utf-8-mac qui signifie UTF-8 NFD. Donc, pour copier des fichiers de votre Mac vers votre NAS, vous devez exécuter quelque chose comme:

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

Cela convertira tous les noms de fichiers locaux de UTF-8 NFD en UTF-8 NFC sur le serveur distant. Le contenu des fichiers ne sera pas affecté.

Grâce à @Jan, j'ai mis à jour ma version rsync sur mon mac à partir de 2.6.9. à 3.1.1. Pourtant, je ne suis toujours pas tout à fait là, car je reçois maintenant une autre erreur:

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]

Je ne comprends pas pourquoi "l'action demandée n'est pas prise en charge" car il semble que la version rsync sur mon Ubuntu (12.04) soit post 3.xx, et devrait donc prendre en charge l' --iconvoption.

EDIT: Permettez-moi d'ajouter que lorsque je (sur le Mac, nota bene) lance une rsync du Mac vers Linux, tout fonctionne à merveille:

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

Mais aller dans l'autre sens »à partir du mac ne fonctionne pas. Curieusement, les tests pour lancer la rsync à partir de la machine linux rendent ce message étrange:

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]

y compris la déclaration très étrange [server=2.6.9], bien que j'ai mis à jour la 3.1.1 sur Mac. Pour certaines raisons, il semble que ma machine Linux ne «voit» que la version rsync d'origine sur le Mac.

Une suggestion sur la façon de résoudre ce problème?

Nick le Suédois
la source

Réponses:

18

La solution était d'une simplicité embarrassante: en grande partie grâce à un commentaire que j'ai lu lors de la recherche du problème, je pensais que vous étiez censé spécifier le jeu de caractères dans l'ordre de transformation; mais il semble que ce ne soit pas la syntaxe correcte. Au contraire, il faut toujours utiliser --iconv=utf-8-mac,utf-8lors de l'initialisation du rsync à partir du mac, et toujours utiliser --iconv=utf-8,utf-8-maclors de l'initialisation du rsync à partir de la machine linux, peu importe si je veux synchroniser des fichiers à partir du mac ou de la machine linux.

Ensuite, cela fonctionne comme par magie!

EDIT: En effet, parfois, consulter la page de manuel de près est une bonne chose à faire. Le voici, noir sur blanc:

--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.
Nick le Suédois
la source
Uhm ... ça m'arrive d'Ubuntu à Amazon S3 ...: |
Tom Roggero
Ça ne fait rien! AWS CLI l'a corrigé pour moi.
Tom Roggero
Blanc sur noir;)
Hello World
3

Je peux confirmer que cela fonctionne, j'avais le même problème. Dans mon cas, tout fichier avec un caractère accentué était illisible sur la destination. Je ne l'ai repéré qu'en exécutant une comparaison de dossiers sur mon Mac en utilisant l'application Compare Folders: https://itunes.apple.com/gb/app/compare-folders/id816042486?mt=12

Ajout de --iconv = utf-8-mac, utf-8 et BOOM ci-dessus! rsync a remplacé chaque fichier accentué par un nouveau.

Pour ajouter des informations car il semble que les liens ci-dessus ne fonctionnent plus, pour mettre à niveau rsync vers 3.1.2, installez Macports et exécutez: sudo port install rsync

La raison pour laquelle vous voyiez le serveur distant renvoyer la version 2.6.9 est que l'ancienne version est toujours là et que le serveur distant voit celle-ci au lieu de la nouvelle.

La version 2.6.9 se trouve dans / usr / bin

vandit6354
la source