39 rsync をアップデートしたい

(未解決案件)

バックアップとか、 リモート・マシンとの間で作業ディレクトリィの同期をするのに、 rsync を使っている。 とても便利で手放せないのだけれど、 日本語のファイル名の表示で文字化けが起こる。 ふと直せないはずはないと思って調べたら、 -iconv=UTF8-MAC,UTF-8 というオプションで解消できると。なるほど、そういうのがあるのか。


ところが macOS に付属する rsync は古いので、そのオプションに対応していない。

% /usr/bin/rsync --version
openrsync: protocol version 29
rsync version 2.6.9 compatible
%
(version 2.6.9 は2006年頃のバージョンらしい。 今は 3.3.0 (protocol version 29) とかが最新みたい。)

こういうときは MacPorts 頼み。
port search rsync
あるある。ではインストールしよう。
sudo port install rsync

これで /opt/local/binrsync がインストールされる。 PATH を適当に設定すれば、これを実行できるようになる。

ところがローカルに使う場合はこれで良いけれど、
rsync --iconv=UTF8-MAC,UTF-8 --avuz どこかのホスト:パス名1 パス名2
としたら
rsync: on remote machine: --iconv=UTF-8: unknown option
というエラー・メッセージが出力される。 ああ、なるほど、 リモート・マシン (Mac) の rsync も対応していないとダメなわけか。

リモート・マシンにも同様にして MacPorts で rsync をインストールしたけれど、 事態は改善されなかった。相変わらず /usr/bin/rsync を起動している。

あれ、でもそうだとすると、 /usr/bin/rsync そのものを置き換えないといけないのかな?

古い古い macOS であれば
cd /usr/bin
sudo mv rsync rsync.old
sudo ln -s /opt/local/bin/rsync .
で置き換え完了になるのかもしれないけれど、 最近の macOS では、普通は /usr/bin の変更は不可だよね。 まあ、強行突破出来なくはないけれど…そこまで無理してやるものではないのかな。

というわけで、回避策を調べて
rsync --iconv=UTF8-MAC,UTF-8 --rsync-path="/opt/local/bin/rsync" むにゃむにゃ
とするやり方を見つけた (-rsync-path= で何を起動するか指定する)。

毎度、こう長たらしいオプションを入力するのは面倒なので、どうしようかな。
どこか/rsync
#!/bin/sh
/opt/local/bin/rsync --iconv=UTF8-MAC,UTF-8 --rsync-path="/opt/local/bin/rsync"  "$@"
というシェル・スクリプトを作ろうかと思ったけれど、 Mac だけを相手にするわけではない。 /opt/local/bin は多分 MacPorts だけだよね。 Linux とかで、 /usr/local/bin というマシンが多そう。それで統一するのが簡単そう。 そこで次のようにした。
どこか/rsync
#!/bin/sh
/opt/local/bin/rsync --iconv=UTF8-MAC,UTF-8 --rsync-path="/usr/local/bin/rsync"  "$@"
これを使えるようにするためには、自分が管理する Mac では、 /usr/local/bin/rsync というシンボリック・リンクを作っておく。
cd /usr/local/bin
sudo ln -s /opt/local/bin/rsync .
cd -

ふう。まだあちこち変なことが起こったりしているけれど、まあまあ動き出した。 やってみると、色々発見があるし、単純に表示が化けないのは気持ちいい。 実際に何が転送されているのか分からないというのは意外とストレスだったようだ。


なんでも、rsync サーバーというのがあるそうだ。

  rsync has the following notes:
    To use the rsyncd server you must copy /opt/local/etc/rsyncd.conf.example to
    rsyncd.conf and add your modules there. See 'man rsyncd.conf' for more
    information.

    A startup item has been generated that will aid in starting rsync with
    launchd. It is disabled by default. Execute the following command to start
    it, and to cause it to launch at startup:

        sudo port load rsync

/opt/local//etc/rsyncd.conf.example
# Sample rsyncd configuration file.
# You must copy it to rsyncd.conf to use it.

log file=/opt/local/var/log/rsyncd.log
pid file=/opt/local/var/run/rsyncd.pid
read only=true
use chroot=yes
list=false

# Specify the modules you want to use here. See "man rsyncd.conf" for more
# information.

面白そうだけど、これは後日。

http://x68000.q-e-d.net/~68user/unix/pickup?rsync#google_vignette



桂田 祐史