基本的な使い方

伝統的にはrsyncはrshを利用したり云々でファイルを転送するツールだっのだが、今日日は大抵SSHを利用してファイルを転送する。なので昔は-e sshというオプションをつけるなり、環境変数で定義するなりしていたのだが、最近はいらなくなったようだ。いつからいらなくなったとかその辺は適当に調べてください。

リモートへのファイル転送(push)

適当に何か作る(ローカルで)

% mkdir moge
% touch moge/{a,b,c}
% find moge
moge
moge/a
moge/c
moge/b

このmoge/を192.168.11.112の/tmpに転送したいとする。基本は-avzというオプションを付ける。

% rsync -avz moge 192.168.11.112:/tmp
user@192.168.11.112's password:
sending incremental file list
moge/
moge/a
moge/b
moge/c

これで転送された。実際にリモートにアクセスして見てみよう。

/tmp/mogeが実は存在していた時

リモートに、/tmp/mogeが存在していた場合はどうなるか。同様にコマンドを打ってみよう。

% rsync -avz moge 192.168.11.112:/tmp

リモート

find /tmp/moge/
/tmp/moge/
/tmp/moge/a
/tmp/moge/b
/tmp/moge/c

他に抑えておくべきは2パターンある

% rsync -avz moge 192.168.11.112:/tmp/moge 

リモート

/tmp/moge/
/tmp/moge/moge
/tmp/moge/moge/a
/tmp/moge/moge/b
/tmp/moge/moge/c
% rsync -avz moge/ 192.168.11.112:/tmp  

リモート

$ find /tmp/
/tmp/
/tmp/a
/tmp/b
/tmp/c
/tmp/moge

このように 第一引数がディレクトリの場合、末尾に/が付くか付かないかで挙動が変わり過ぎるので注意。

リモートからのファイル転送(pull)

基本は第一引数と第二引数を入れかえるだけで、リモートの/tmp/moge/{a,b,c}があった場合、それを転送する方法から入ろうか。

% rsync -avz 192.168.11.112:/tmp/moge . 
user@192.168.11.112's password:
receiving incremental file list
moge/
moge/a
moge/b
moge/c

ローカル

% find moge
moge
moge/a
moge/c
moge/b

ローカルにmogeが存在していた場合

これもいろいろある

% rsync -avz 192.168.11.112:/tmp/moge . 

ローカル

% find moge
moge
moge/a
moge/c
moge/b
% rsync -avz 192.168.11.112:/tmp/moge moge

ローカル

% find moge 
moge
moge/moge
moge/moge/a
moge/moge/c
moge/moge/b
% rsync -avz 192.168.11.112:/tmp/moge/ .

これは注意しないといけない。カレントにmoge/以下の内容がぶちまけられる。

禁断の--deleteオプション

rsync、その名の通りsyncなので完全に同じにする事ができるわけだ。これを実現するために–deleteオプションがある。

たとえば、ローカルがこうなっているとしよう

% find moge
moge
moge/a
moge/b
moge/c

リモートの/tmp以下がこうだとする

$ find /tmp/moge/
/tmp/moge/
/tmp/moge/a
/tmp/moge/g
/tmp/moge/e

ここでまずどちらに合わせるのかが重要なわけだが、要件にもよるかと思う。そしてどちらから送るのか、これも要件によるが、ここではこう定義しよう。

ローカルからリモートにpushし、リモートの/tmp以下をローカルと同じにする(/tmp/moge/{a,b,c})

このようにするのだが、、、

% rsync --delete -avz moge 192.168.11.112:/tmp

–deleteを使う場合は–dry-runしておくのがいい

% rsync --delete -avz moge 192.168.11.112:/tmp --dry-run
user@192.168.11.112's password:
sending incremental file list
moge/
deleting moge/g
deleting moge/e
moge/a
moge/b
moge/c

何が消されるのか一目瞭然だ。しかしながらファイルが大量にある場合はよくわからんかもしれない。いずれにせよ、第一引数側が優先される

ためしに、リモートの/tmp/mogeの内容にローカルを同期してdeleteさせるものとしよう。

% rsync --delete -avz 192.168.11.112:/tmp/moge . --dry-run
user@192.168.11.112's password:
receiving incremental file list
deleting moge/c
deleting moge/b
moge/
moge/a
moge/e
moge/g

このような感じ。

なお、deleteオプションはまったなしなので心配ならコピーを取っておく事でしょうな

rsync/basic_usage.txt · 最終更新: 2014/10/22 15:56 by admin
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0