Я хочу використовувати rsync для резервного копіювання даних з віддаленого сервера Linux на мій локальний Mac. І я хочу ініціалізувати цю операцію на своєму локальному 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 на віддаленому сервері. На вміст файлів це не вплине.
Проблема полягає в тому, що для мене це працює лише в один спосіб, а саме при синхронізації з Mac до Linux. Але я хочу "піти іншим шляхом", тобто синхронізувати з машини Linux на Mac. І я хочу ініціалізувати операцію зі свого локального Mac. Але коли я намагаюся:
rsync -av --delete --iconv=utf-8,utf-8-mac mynas:remotedir/ localdir/
Я отримую помилку:
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 на Mac оновлюється з 2.6.9. до 3.1.1. за допомогою Macports . Зауважте, що операція працює тоді, коли я (на Mac, nota bene) ініціюю rsync ІЗ Mac TO Linux:
rsync -av --delete --iconv=utf-8-mac,utf-8 localdir/ mynas:remotedir/
Але йти іншим шляхом 'від mac - що я хочу зробити - не виходить.
Як не дивно, тестування для запуску синхронізації з машини 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.
Будь-яка пропозиція, як це вирішити?
ОНОВЛЕННЯ 23 жовтня : відмінна пропозиція Per @Lee Johnson (див. Нижче), ініціювання синхронізації з Linux-сервера зараз працює. Для повноти я зараз спробував усі комбінації, і вийшов цікавий візерунок:
ON MAC:
РОБОТИ: Файли з Mac на Linux
ПОМИЛКИ: Файли з Linux на Mac
ON LINUX
РОБОТИ: Файли з Linux на Mac
ПОМИЛИ: Файли з Mac на Linux
Іншими словами, --iconv
варіант, здається, працює лише в один бік, з файлами з локальної машини на віддалений, а не навпаки. Мені це схоже на помилку, але, можливо, саме так ПОДАЧАЙТЕ працювати?
Хтось може поділитися світлом на цьому?
.DS_Store
із синхронізації, і через це OSX не міг видалити каталоги з цими файлами всередині. Я налаштовував набори символів з --iconv
, шлях rsync на mac з --rsync-path
(я використовую домашню мову), а потім повинен був додати --delete-excluded
так, щоб вперті каталоги можна було видалити.
rsync
на mac користувальницького (наприклад, з homebrew) та виклику його з linux, потрібно вказати правильний шлях за допомогою--rsync-path="/usr/local/bin/rsync"