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
オプションは、ローカルマシンからリモートへのファイルでは、一方向にのみ機能し、逆には機能しないようです。それは私にはバグのように見えますが、たぶんそれが動作することがサポートされている方法ですか?
これについて光を共有できる人はいますか?
.DS_Store
同期から除外していたため、このOSXにより、これらのファイルが含まれているディレクトリを削除できませんでした。で文字セットをセットアップ--iconv
し、macでrsyncパスを--rsync-path
(私はhomebrewを使用して)設定した後--delete-excluded
、頑固なディレクトリを削除できるように追加する必要がありました。
rsync
Macでカスタム(例:自作)を使用し、Linuxからそれを呼び出す場合、次を使用して正しいパスを指定する必要があります--rsync-path="/usr/local/bin/rsync"