web-dev-qa-db-ja.com

MacとLinuxの間で機能しない特殊文字ファイルを含むRsync

Rsyncを使用して、UbuntuサーバーをMac上のディスクにバックアップします。しかし、初回以降にrsync操作を再実行するたびに、特殊文字を含むファイルが最初に削除されてから再同期されるため、適切に動作しません。異なる文字セットに問題があるかのようです。

推奨ソリューション--iconvオプションを使用するようです:

少なくともMacを使用している場合は、rsyncの--iconvオプションを使用して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に変換されます。ファイルの内容は影響を受けません。

@Janのおかげで、私は Macのrsyncバージョンを更新 2.6.9から。 3.1.1へ。それでも、エラーがさらに表示されるので、まだそこにはいません。

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]

Ubuntu(12.04)のrsyncバージョンは3.x.x以降であり、--iconvオプションをサポートする必要があるため、「要求されたアクションがサポートされない」理由を理解できません。

編集:私は(Macでは、nota beneで)MacからLinuxへのrsyncを開始すると、すべてがうまく機能することを追加します:

rsync -av --delete --iconv=utf-8-mac,utf-8 localdir/ mynas:remotedir/

しかし、Macから逆方向に移動しても機能しません。奇妙なことに、Linuxマシンからrsyncを開始するためのテストでは、次の奇妙なメッセージが表示されます。

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バージョンのみを「見る」ように見えます。

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

17
Nick The Swede

解決策は非常に単純でした。問題を調査するときに読んだコメントのせいで、変換の順序で文字セットを指定することになっていると思いました。しかし、それは正しい構文ではないようです。むしろ、always macからrsyncを初期化するときに--iconv=utf-8-mac,utf-8を使用し、always Linuxマシンからrsyncを初期化するときに--iconv=utf-8,utf-8-macを使用する必要があります。 MacまたはLinuxマシンからファイルを同期するかどうかは関係ありません。

それは魔法のように動作します!

編集:確かに、時々、マニュアルページを注意深くチェックすることは良いことです。ここに、白地に黒があります:

--iconv=CONVERT_SPEC
              Rsync  can  convert  filenames between character sets using this
              option.  Using a CONVERT_SPEC of "." tells rsync to look up  the
              default  character-set via the locale setting.  Alternately, you
              can fully specify what conversion to do by giving a local and  a
              remote   charset   separated   by   a   comma   in   the   order
              --iconv=LOCAL,REMOTE, e.g.  --iconv=utf8,iso88591.   This  order
              ensures  that the option will stay the same whether you're Push-
              ing  or  pulling  files.
16
Nick The Swede

私はこの作品を確認することができます、私は同じ問題を抱えていました。私の場合、アクセント記号付きの文字を含むファイルは、宛先では読み込めませんでした。 Compare Foldersアプリケーションを使用してMacでフォルダー比較を実行することでそれを見つけました: https://iTunes.Apple.com/gb/app/compare-folders/id816042486?mt=12

上記の--iconv = utf-8-mac、utf-8およびBOOMを追加しました! rsyncはすべてのアクセント付きファイルを新しいファイルに置き換えました。

上記のリンクが機能しないと思われる情報を追加するには、rsyncを3.1.2にアップグレードするには、Macportsをインストールして実行します:Sudo port install rsync

リモートサーバーがバージョン2.6.9を返すのを見たのは、古いバージョンが実際にはまだ存在し、リモートサーバーが新しいサーバーではなくそのサーバーを認識しているためです。

バージョン2.6.9は/ usr/binにあります

2
vandit6354