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


9

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

rsyncの--iconvオプションを使用して、少なくともMacを使用している場合は、UTF-8 NFCとNFDの間で変換できます。UTF-8 NFDを表す特別なutf-8-mac文字セットがあります。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]

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

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

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

MAC上:

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

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

Linux上

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

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

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

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


1
rsyncMacでカスタム(例:自作)を使用し、Linuxからそれを呼び出す場合、次を使用して正しいパスを指定する必要があります--rsync-path="/usr/local/bin/rsync"
meduz

.DS_Store同期から除外していたため、このOSXにより、これらのファイルが含まれているディレクトリを削除できませんでした。で文字セットをセットアップ--iconvし、macでrsyncパスを--rsync-path(私はhomebrewを使用して)設定した後--delete-excluded、頑固なディレクトリを削除できるように追加する必要がありました。
Daniel

回答:


12

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

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

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


UTF8-MACは疑似文字セットであり、Ubuntu 14.04 LTSの最新の3.1.1バージョンではなくても、Linuxシステムのiconvlibではそれ自体は使用できません。Linuxで同期を開始しようとしても機能しません。
アヒムランメルト

5

最近、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

100万人に感謝します。これにより、2.6.9を取得した理由の謎が解決します。メッセージ。(ただし、私のMacでは、Macportがインストールされているバージョンは/ opt / local / bin / rsyncにありますが、そのスポーツへのリンクを変更するとうまくいきました。)残念ながら、MACマシンから同期を初期化したいので、これは役に立ちます私のLinuxマシンが何をすべきかを理解できることを理解している限り。それでは、なぜ私のMacから初期化したときに機能しないのですか?つまり、「rsync -av --delete --iconv = utf-8、utf-8-mac mynas:remotedir / localdir /」
Nick The Swede

また、残念ながら私は評判が低すぎてあなたの役に立つ回答を+1できないことも言います。それでもまだ期待どおりに機能しないため、解決したとは言えません。いずれにせよ、私の心の中で金の星(そして、私の担当者が15を超えたらすぐに戻って+1することを約束します)!
Nick The Swede 2014年

rsync 3.xを実行していても、OS X側からはまだ機能しないと言っていますか?--iconv2.6.9ではサポートされていないと思います。rsyncが処理のためにリモートホストにオプションを送信するだけの場合でも、OS X側でオプションを認識する必要があります。which rsync; rsync --versionOS X端末から何がわかりますか?
Lee Johnson、

そのとおりです。エラーメッセージ(質問の3番目の灰色の引用)を見るとわかるように、Macで3.1を使用していることが認識され、[Receiver = 3.1.1]と表示されます。 Linux側から、だけでなく、私はLinuxサーバへのMac上のMac、ファイルから、同期するとき。しかし、Macからは、LinuxからMacへのファイルは機能しません。とても奇妙です(少なくとも私の目から見て)。
Nick The Swede 2014年

2
Linuxからこれを試しているとき--rsync-path=/opt/local/bin/rsyncに、Mac側で既知の3.1.1バージョンを取得するようなもので実行可能パスを強制するとどうなりますか?
Lee Johnson
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.