Я хочу использовать rsync для резервного копирования данных с удаленного сервера Linux на мой локальный Mac. И я хочу инициализировать эту операцию на моем локальном 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 на удаленном сервере. Содержание файлов не будет затронуто.
Проблема в том, что для меня это работает только «в одну сторону», а именно при синхронизации с 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 в 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 октября : замечательное предложение Пера @ Джонсона (см. Ниже), инициализация синхронизации с сервера linux теперь работает. Для полноты я попробовал все комбинации, и появился интересный паттерн:
НА MAC:
РАБОТАЕТ: Файлы с Mac на Linux
ОШИБКИ: файлы из Linux на Mac
ON LINUX
РАБОТАЕТ: Файлы с Linux на Mac
ОШИБКИ: файлы с Mac на Linux
Другими словами, эта --iconv
опция, кажется, работает только одним способом, с файлами с локального компьютера на удаленный, а не наоборот. Для меня это похоже на ошибку, но, может быть, именно так ДОЛЖЕН работать?
Кто-нибудь может поделиться этим светом?
rsync
(например, из homebrew) на mac и вызова его из linux, необходимо указать правильный путь с помощью--rsync-path="/usr/local/bin/rsync"
.DS_Store
из синхронизации и из-за этого OSX не мог удалить каталоги с этими файлами внутри. Я установил наборы символов с--iconv
помощью пути rsync на компьютере Mac--rsync-path
(я использую homebrew), а затем мне пришлось добавить,--delete-excluded
чтобы упрямые каталоги можно было удалить.Ответы:
После долгих экспериментов и во многом благодаря полезным предложениям @Lee Johnson я, наконец, нашел решение, которое теперь кажется мне неловко очевидным. Во многом благодаря комментарию, который я прочитал при исследовании проблемы, я подумал, что вы должны были указать набор символов в порядке преобразования; но кажется, что это не правильный синтаксис. Скорее следует
ВСЕГДА используйте
--iconv=utf-8-mac,utf-8
при инициализации rsync с Mac, и ВСЕГДА используйте--iconv=utf-8,utf-8-mac
при инициализации rsync с машины linux, независимо от того, хочу ли я синхронизировать файлы с машины mac или linux.Тогда это работает как волшебство!
источник
Вы недавно обновились до OS X Yosemite? У меня была такая же проблема, прежде чем я вспомнил, что я обновил / usr / bin / rsync с версией 3.1. Когда я обновился до Yosemite, его заменили старой версией 2.6.9.
В моем собственном случае я исправил проблему на Mac, вернув мой rsync 3.1 обратно в / usr / bin:
источник
--iconv
поддерживается в 2.6.9; даже если rsync просто отправляет опцию на удаленный хост для обработки, он должен распознать опцию на стороне OS X. Чтоwhich rsync; rsync --version
говорит вам, из терминала OS X?--rsync-path=/opt/local/bin/rsync
запустите путь к исполняемому файлу, чтобы получить известную версию 3.1.1 на стороне Mac?