特殊文字ファイルを含む Rsync が Mac と Linux 間で動作しない

特殊文字ファイルを含む Rsync が Mac と Linux 間で動作しない

rsync を使用して、Mac にあるディスクで Ubuntu サーバーをバックアップしたいのですが、最初の 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.xx 以降であるため、このオプションをサポートしているはずなのに、「要求されたアクションはサポートされていません」と表示される理由がわかりませ--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]

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

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

答え1

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

すると魔法のように効きます!

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

--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.

答え2

これは機能することを確認できます。私も同じ問題を抱えていました。私の場合、アクセント記号付きの文字を含むファイルは、送信先で読み取れませんでした。Compare Folders アプリケーションを使用して Mac でフォルダー比較を実行して初めて、この問題に気付きました。 https://itunes.apple.com/gb/app/compare-folders/id816042486?mt=12

上記の --iconv=utf-8-mac,utf-8 を追加すると、rsync によってアクセント付きのファイルがすべて新しいファイルに置き換えられました。

上記のリンクは機能しなくなったようですので、情報を追加します。rsync を 3.1.2 にアップグレードするには、Macports をインストールして、次のコマンドを実行します: sudo port install rsync

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

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

関連情報