Rsync зі спеціальними файлами символів, які не працюють між Mac та Linux


18

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

Бажаний рішення , як видається, використовувати --iconvопцію:

Для перетворення між UTF-8 NFC та NFD ви можете використовувати опцію - rsync --iconv, принаймні, якщо ви працюєте на 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 TO 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.

Будь-яка пропозиція, як це вирішити?

Відповіді:


18

Рішення було бентежно простим. Багато чого, завдяки коментарю, який я прочитав під час дослідження проблеми, я вважав, що ви повинні вказати набір символів у порядку перетворення; але здається, що це не правильний синтаксис. Швидше, завжди слід використовувати --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.

Гм ... це трапляється зі мною від Ubuntu до Amazon S3 ...: |
Том Роджеро

Не зважай! AWS CLI виправив це для мене.
Том Роджеро

Біле на чорному;)
Hello World

3

Я можу підтвердити це, у мене була така ж проблема. У моєму випадку будь-який файл із наголошеним символом був нечитабельним у пункті призначення. Я помітив це лише за допомогою порівняння папок на своєму Mac за допомогою програми Порівняння папок: 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 встановити rsync

Причина, по якій ви бачили, як віддалений сервер повертається версією 2.6.9, полягає в тому, що стара версія насправді все ще існує, а віддалений сервер бачить цю, а не нову.

Версія 2.6.9 розміщена в / usr / bin

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.