Rsync со специальными символьными файлами, не работающими между Mac и Linux
Я хочу использовать rsync для резервного копирования моего сервера Ubuntu с диска, расположенного на Mac. Но я не могу заставить его работать должным образом, так как каждый раз, когда я повторно запускаю операцию rsync после начального времени, файлы со специальными символами сначала удаляются, а затем повторно синхронизируются. Кажется, что есть проблема с различными наборами символов.
Предполагается, что предпочтительным решением является использование --iconv
опция:
Вы можете использовать опцию --iconv rsync для конвертации между 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
вариант.
РЕДАКТИРОВАТЬ: Позвольте мне добавить, что когда я (на 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.
Любое предложение о том, как решить эту проблему?
2 ответа
Решение было смущающе простым: во многом благодаря комментарию, который я прочитал при исследовании проблемы, я подумал, что вы должны были указать набор символов в порядке преобразования; но кажется, что это не правильный синтаксис. Скорее следует всегда использовать --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.
Я могу подтвердить это работает, у меня была такая же проблема. В моем случае любой файл с акцентированным символом не мог быть прочитан в месте назначения. Я только заметил это, запустив сравнение папок на моем Mac с помощью приложения Compare Folders: https://itunes.apple.com/gb/app/compare-folders/id816042486?mt=12
Добавлены выше --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