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

10

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

предпочтительным решением является использование опции --iconv :

  

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

     

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

Это преобразует все локальные имена файлов из UFF-8 NFD в UFC-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) является post 3.x.x и поэтому должна поддерживать параметр --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.

Любое предложение о том, как решить эту проблему?

    
задан Nick The Swede 08.10.2014 в 15:39
источник

2 ответа

10

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

Затем он работает как волшебство!

РЕДАКТИРОВАТЬ: Действительно, иногда проверка страницы руководства - это хорошо. Вот он, черный на белом:

--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 The Swede 24.10.2014 в 11:13
источник
0

Я могу подтвердить это, у меня была та же проблема. В моем случае любой файл с акцентированным символом был нечитаемым в пункте назначения. Я только заметил это, выполнив сравнение папок на моем Mac с помощью приложения Compare Folders: Ссылка

Добавлено выше --iconv = utf-8-mac, utf-8 и BOOM! rsync заменил каждый акцентированный файл на новый.

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

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

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

    
ответ дан vandit6354 27.08.2017 в 07:47