Я хочу использовать rsync для данных резервного копирования с удаленного сервера Linux на мой локальный Mac. И я хочу инициализировать эту операцию на своем локальном 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 на удаленном сервере. Содержание файлов не будет затронуто.
Проблема состоит в том, что это только работает 'один путь' ко мне, а именно, при синхронизации от 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, нотабене) инициирую 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 октября: На превосходное предложение @Lee Johnson (см. ниже), инициирование теперь работает синхронизация с сервера Linux. Для полноты я теперь попробовал все комбинации, и появляется интересный шаблон:
НА MAC:
РАБОТЫ: файлы от Mac до Linux
СБОИ: файлы с Linux на Mac
НА LINUX
РАБОТЫ: файлы с Linux на Mac
СБОИ: файлы от Mac до Linux
Другими словами, --iconv
опция, кажется, работает только один путь, с файлами от локальной машины до удаленного, не наоборот. Это похоже на ошибку мне, но возможно который является способом, которым это, КАК ПРЕДПОЛАГАЕТСЯ, работает?
Кто-либо, который в состоянии совместно использовать свет на этом?
После долгих экспериментов и, во многом благодаря полезным предложениям @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, повторно связав свой 3.1 rsync обратно в / usr / bin:
sudo -s
cd /usr/bin
mv rsync rsync-2.6.9
ln -s /usr/local/bin/rsync .
exit
Способ, которым я решил эту проблему в Mac OS Big Sur:
Установите новую версию rsync с помощью brew
:
$
:brew install rsync
отобразить список путей rsync:
$
:список rsync rsync
/usr/local/Cellar/rsync/3.2.3/bin/rsync
/usr/local/Cellar/rsync/3.2.3/bin/rsync-ssl
/usr/local/Cellar/rsync/3.2.3/share/man/ (3 files)
создать резервную копию бинарной команды старой версии ссылка:
$
:mv /usr/local/bin/rsync /usr/local/bin/rsync2
создайте ссылку на бинарную команду новой версии:
$
:ln -s /usr/local/Cellar/rsync/3.2.3/bin/rsync / usr/local/bin/rsync