前回、ファイルの順次マージを支援するツールが用意できた。これでローカルにあるファイルの取り込みは簡単にできるわけだが、リモートにあるファイルはどうだろう?一つずつ持ってきて比較というのでは遅い*1ので、対象ファイルを一括で取り込みたい。
今、local/
にSubversion作業ディレクトリがあり、リモートホスト$host
にあるファイルはremote/$host/
にミラーするものとする。somewhere.example.org
から、local/
に存在するファイルだけを持ってくるにはどうすればよいか。
もったいぶってもしょうがないのですぐに答えを示す。実質ワンライナーだね。
1 2 3 |
host=somewhere.example.org; \ ( cd local && find . \! \( -name .svn -prune \) -type f | sed 's/^\.//' ) \ | rsync -aRv --files-from=- $host: remote/$host/ |
rsync(1)
のスラッシュで始まるパターンマッチと、-R
による相対パス解釈の組み合わせが強力。include/excludeパターンを活用すれば、リモートで余計なディレクトリを突き進むこともない。覚えておきたい手筋。
もっとも、tipだidiomだとクリップしてありがたがるのではなく、何か捻り出してやろうという気構えが大事。日々工夫。
追記:動かないやつを載せてました。正しいオプションは--files-from
です。日々失敗。
Your point of view caught my eye and was very interesting. Thanks. I have a question for you.