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

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

Предпочтительное решение, кажется, для использования --iconv опция:

Можно использовать rsync's - 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 до NFC UTF-8 на удаленном сервере. Содержание файлов не будет затронуто.

Благодаря @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.x.x и таким образом должна поддерживать --iconv опция.

Править: Позвольте мне добавить, что, когда я (на Mac, нотабене) инициирую 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.

Какое-либо предложение о том, как решить это?

16
задан 13 April 2017 в 05:23

2 ответа

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

Тогда это работает как волшебство!

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

--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.
16
ответ дан 23 November 2019 в 02:35

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

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

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

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

Версия 2.6.9 расположена в/usr/bin

2
ответ дан 23 November 2019 в 02:35

Другие вопросы по тегам:

Похожие вопросы: