Назад | Перейти на главную страницу

Параметр rsync --iconv на Mac не работает (синхронизация с удаленного сервера Linux на локальный Mac)

Я хочу использовать rsync для резервного копирования данных с удаленного сервера Linux на мой локальный Mac. И я хочу инициализировать эту операцию на моем локальном Mac. Все работает нормально, за исключением того, что есть проблема со специальными символами: каждый раз, когда я повторно запускаю операцию rsync (после начальной синхронизации), файлы со специальными символами сначала удаляются, а затем повторно синхронизируются. Насколько я понимаю, есть проблема с разными наборами символов, и предпочтительное решение кажется, использовать --iconv вариант:

Вы можете использовать параметр rsync --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 в 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 октября: Согласно отличному предложению @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