Rsync с файлами специальных символов не работает между Mac и Linux

Rsync с файлами специальных символов не работает между Mac и Linux

Я хочу использовать rsync для резервного копирования моего сервера Ubuntu с диском, находящимся на Mac. Но у меня не получается это сделать должным образом, так как каждый раз, когда я перезапускаю операцию rsync после первоначального раза, файлы со специальными символами сначала удаляются, а затем повторно синхронизируются. Похоже, что проблема в разных наборах символов.

Theпредпочтительное решениепохоже, следует использовать --iconvопцию:

Вы можете использовать опцию rsync --iconv для преобразования между UTF-8 NFC и NFD, по крайней мере, если вы работаете на Mac. Существует специальный набор символов utf-8-mac, который обозначает UTF-8 NFD. Поэтому для копирования файлов с вашего Mac на NAS вам нужно будет запустить что-то вроде:

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

Это преобразует все локальные имена файлов из UTF-8 NFD в UTF-8 NFC на удаленном сервере. Содержимое файлов не будет затронуто.

Спасибо @Jan, яобновил версию rsync на моем macс 2.6.9. по 3.1.1. Но я все еще не совсем там, так как теперь получаю еще одну ошибку:

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]

Я не могу понять, почему «запрошенное действие не поддерживается», поскольку, судя по всему, версия rsync на моем Ubuntu (12.04) старше 3.xx и, таким образом, должна поддерживать эту --iconvопцию.

EDIT: Позвольте мне добавить, что когда я (на Mac, nota bene) инициирую rsync ИЗ Mac В Linux, все работает великолепно:

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

Но «идти в другую сторону» с mac не работает. Как ни странно, тестирование инициирования rsync с машины linux выдает это странное сообщение:

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]

включая очень странное заявление [server=2.6.9], хотя я обновился до 3.1.1 на Mac. По некоторым причинам, похоже, что моя машина Linux «видит» только оригинальную версию rsync на Mac.

Есть ли у вас предложения, как решить эту проблему?

решение1

Решение было до смешного простым: во многом благодаря комментарию, который я прочитал, когда исследовал проблему, я думал, что вы должны были указать набор символов в порядке преобразования; но, похоже, это неверный синтаксис. Вместо этого следуетвсегдаиспользовать --iconv=utf-8-mac,utf-8при инициализации rsync с Mac, ивсегдаиспользуйте --iconv=utf-8,utf-8-macпри инициализации rsync с машины Linux, независимо от того, хочу ли я синхронизировать файлы с машины Mac или Linux.

И тогда это сработает как по волшебству!

EDIT: Действительно, иногда полезно внимательно проверить страницу руководства. Вот она, черным по белому:

--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.

решение2

Я могу подтвердить, что это работает, у меня была та же проблема. В моем случае любой файл с акцентированным символом был нечитаемым в месте назначения. Я обнаружил это, только запустив сравнение папок на моем Mac с помощью приложения Compare Folders: https://itunes.apple.com/gb/app/compare-folders/id816042486?mt=12

Добавил указанный выше --iconv=utf-8-mac,utf-8 и БАБАХ! rsync заменил все файлы с диакритическими знаками на новые.

Чтобы добавить некоторую информацию, поскольку, похоже, ссылки выше больше не работают, чтобы обновить rsync до 3.1.2, установите Macports и выполните: sudo port install rsync

Причина, по которой вы видите, что удаленный сервер возвращает версию 2.6.9, заключается в том, что старая версия на самом деле все еще существует, и удаленный сервер видит ее вместо новой.

Версия 2.6.9 находится в /usr/bin

Связанный контент