web-dev-qa-db-ja.com

Macでrsync --iconvオプションが機能しない(リモートLinuxサーバーからローカルMacに同期)

Rsyncを使用して、リモートのLinuxサーバーからローカルのMacにデータをバックアップしたい。そして、ローカルMacでこの操作を初期化したいと思います。特殊文字の問題があることを除いて、すべて正常に機能します。rsync操作を(最初の同期の後で)再実行するたびに、特殊文字を含むファイルが最初に削除され、次に再同期されます。私が理解している限り、さまざまな文字セットに問題があり、 推奨される解決策--iconvオプションを使用するようです:

Rsyncの--iconvオプションを使用して、少なくともMacを使用している場合は、UTF-8 NFC&NFDの間で変換できます。特別な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]

これが機能しない理由を理解できずに困っています。 Macのrsyncバージョンが2.6.9から更新されました。 3.1.1に。 Macports を使用します。この操作は、私(Macでは注意)がMacからLinuxへのrsyncを開始したときに機能することに注意してください。

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]

macで3.1.1にアップデートしましたが、非常に奇妙な主張[server=2.6.9]を含みます。いくつかの理由により、私のLinuxマシンはMac上の元のrsyncバージョンのみを「認識」しているように見えます。

これを解決する方法について何か提案はありますか?

UPDATE 10月23日:@Lee Johnsonの優れた提案(下記を参照)により、Linuxサーバーからの同期の開始が機能するようになりました。完全を期すために、私はすべての組み合わせを試してみましたが、興味深いパターンが現れました:

ON MAC:

WORKS:MacからLinuxへのファイル

失敗:LinuxからMacへのファイル

ON LINUX

WORKS:LinuxからMacへのファイル

失敗:MacからLinuxへのファイル

言い換えると、--iconvオプションは、ローカルマシンからリモートへのファイルの場合、一方の方向にしか機能せず、逆方向には機能しないようです。それは私にはバグのように見えますが、おそらくそれは動作することがサポートされている方法ですか?

これについて光を共有できる人はいますか?

9
Nick The Swede

たくさんの実験の結果、そして@Lee Johnsonの有益な提案のおかげで、私はようやく解決策を見つけました。その解決策は今や恥ずかしいほど明白に感じられます。問題の調査時に読んだコメントのおかげで、変換の順序で文字セットを指定することになっていると思いました。しかし、それは正しい構文ではないようです。むしろ、

常に--iconv=utf-8-mac,utf-8 Macからrsyncを初期化するとき、常に--iconv=utf-8,utf-8-mac Linuxマシンからrsyncを初期化するとき、MacまたはLinuxマシンからファイルを同期するかどうかに関係なく。

その後、魔法のように動作します!

12
Nick The Swede

最近、OS X Yosemiteにアップグレードしましたか?/usr/bin/rsyncをバージョン3.1に更新したことを思い出す前に、同じ問題が発生しました。 Yosemiteにアップグレードすると、古い2.6.9バージョンに置き換えられました。

私自身の場合、3.1 rsyncを/ usr/binに再リンクして、Macで問題を修正しました。

Sudo -s
cd /usr/bin
mv rsync rsync-2.6.9
ln -s /usr/local/bin/rsync .
exit
5
Lee Johnson