rsync-2.6.3
作成 : 2005/01/02
rsync
rsyncは、ローカルまたはリモートとのファイルコピーをするためのユーティリティ。 更新されたファイルだけコピーするとか、消したファイルはリモートからも削除するとか、いろいろできるらしい。
リモートとのやり取りは、2.6.0からssh使用がデフォルトになったみたい。 なので、コピー元とコピー先のホストでsshによる通信が行えることが前提。
インストール
configure-->make-->make install。 バイナリは/usr/local/binにインストールされた。
# tar -zxvf rsync-2.6.3.tar.gz # cd rsync-2.6.3 # ./configure # make # make install
使ってみる
ローカルの/hogeフォルダ全体を、リモートホスト10.1.1.1の/fooフォルダにコピーしてみる。 新規または更新されたファイルやフォルダは、リモートホストにコピーされる。
$ rsync -avz /hoge 10.1.1.1:/foo <--- リモートホストの後にコロンをつけてからディレクトリを指定 The authenticity of host '10.1.1.1 (10.1.1.1)' can't be established. <--- ~/.ssh/known_hosts に登録されていないときは、メッセージが表示される RSA key fingerprint is 4d:1a:87:d6:f8:c5:d8:2e:b9:ac:2d:f5:50:d4:35:72. Are you sure you want to continue connecting (yes/no)? yes <--- ~/.ssh/known_hosts に登録してよいなら"yes"を入力 Warning: Permanently added '10.1.1.1' (RSA) to the list of known hosts. user@10.1.1.1's password: (password) <--- リモートホストのユーザのパスワードを入力 building file list ... done hoge/ hoge/hoge00/ hoge/hoge00/hoge01.txt hoge/hoge00/hoge02.txt hoge/hoge1.txt hoge/hoge2.txt sent 377 bytes received 120 bytes 198.80 bytes/sec total size is 4 speedup is 0.01 オプション -a : アーカイブ(-rlptgoDと同じ) -r : 再帰的(指定しないとディレクトリはスキップ) -l : シンボリックリンクをコピー -p : パーミッションを維持 -t : タイムスタンプを維持 -g : 所有グループを維持 -o : 所有者を維持 -D : デバイスファイルをコピー -v : 詳細を表示 -z : 圧縮してコピー リモートホストには以下のようにコピーされる foo/ +-hoge/ +-hoge00/ | +-hoge01.txt | +-hoge02.txt +-hoge1.txt +-hoge2.txt
コピー元のディレクトリの後にスラッシュをつけると、コピー先での配置が変わるので注意する。
$ rsync -avz /hoge/ 10.1.1.1:/foo <--- コピー元ディレクトリの後にスラッシュをつけてみる user@10.1.1.1's password: (password) <--- リモートホストのユーザのパスワードを入力 building file list ... done ./ ./hoge00/ ./hoge00/hoge01.txt ./hoge00/hoge02.txt ./hoge1.txt ./hoge2.txt sent 377 bytes received 120 bytes 198.80 bytes/sec total size is 4 speedup is 0.01 リモートホストには以下のようにコピーされる foo/ +-hoge00/ | +-hoge01.txt | +-hoge02.txt +-hoge1.txt +-hoge2.txt
コピー元にないファイルやフォルダを、コピー先から削除したい場合は、--deleteオプションをつける。
$ rsync -avz --delete /hoge 10.1.1.1:/foo <--- deleteオプション
-bオプションをつけると、コピー元とコピー先で同じ名前のファイルが存在する場合、コピー先のファイル名にサフィックス(デフォルトは~チルダ)を付加してから、コピー元のファイルを転送する。 コピー先のファイル名につけるサフィックスは、--suffixオプションで変更することができる。
$ rsync -b --suffix=".bak" /hoge 10.1.1.1:/foo
特定のファイルまたはディレクトリを除外したい場合は、--excludeオプションをつけて除外パターンを指定する。 複数パターンを除外したい場合は、--excludeオプションを複数指定する。 パターンの最初にスラッシュをつけると、トランスファールート直下のファイルまたはディレクトリのみ除外される。 パターンの最後にスラッシュをつけると、ディレクトリのみ除外される。 コピー元ディレクトリの後ろにスラッシュをつける場合とつけない場合で、トランスファールートの解釈が変わるので注意。
$ rsync -avz --exclude="hoge01*" /hoge/ 10.1.1.1:/foo 赤のファイル・ディレクトリは除外される hoge/ +-hoge00/ | +-hoge01/ | +-hoge02/ | +-hoge01.txt | +-hoge02.txt +-hoge01.txt +-hoge02.txt
$ rsync -avz --exclude="/hoge01*" /hoge/ 10.1.1.1:/foo <--- パターンの最初にスラッシュをつける 赤のファイル・ディレクトリは除外される hoge/ +-hoge00/ | +-hoge01/ | +-hoge02/ | +-hoge01.txt | +-hoge02.txt +-hoge01.txt +-hoge02.txt
$ rsync -avz --exclude="hoge01*/" /hoge/ 10.1.1.1:/foo <--- パターンの最後にスラッシュをつける 赤のファイル・ディレクトリは除外される hoge/ +-hoge00/ | +-hoge01/ | +-hoge02/ | +-hoge01.txt | +-hoge02.txt +-hoge01.txt +-hoge02.txt
ローカルホストと異なるユーザでリモートホストにログインしたい場合は、次のようにする。
$ rsync -avz hoge_user@/hoge 10.1.1.1:/foo <--- リモートホストのユーザを指定 hoge_user@10.1.1.1's password: (password) <--- リモートホストのユーザhoge_userのパスワードを入力
スクリプトで動かすときのパスワード入力
rsyncを実行するとき、ssh接続のためのパスワード入力を求められるが、Cronから時刻起動したいときなどに困る。 ssh接続に公開鍵認証を使っているなら、パスワードなしの秘密鍵を作るか、ssh-agentを使う。 公開鍵認証を使う方法とssh-agentについては、LinuxでSSHを参照。