Bus errorとSegmentation faultに困ったら見るブログ

物理の研究者による日々の研究生活のメモ書きです ( python/emacs/html/Japascript/シェルスクリプト/TeX/Mac/C言語/Linux/git/tmux/R/ポケモンGO)

【シェルコマンド】rsyncの使い方

(元記事 2011/12/19)

 

便利コマンドrsyncの使い方などについてまとめる。何をするコマンドか簡単に書くと、指定したディレクトリの内容を同期してくれるコマンド
わざわざcpコマンドでオプションを使ったりしてシェルスクリプトを書く必要はない


まずはversionを確認

下の結果はMac OS X 10.7.2(Lion)で実行したときの結果
どうやら2.6.9らしい

$rsync --version
rsync version 2.6.9 protocol version 29Copyright (C) 1996-2006 by Andrew Tridgell, Wayne Davison, and others.

Capabilities: 64-bit files, socketpairs, hard links, symlinks, batchfiles,
inplace, IPv6, 64-bit system inums, 64-bit internal inums

rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you
are welcome to redistribute it under certain conditions. See the GNU
General Public Licence for details.

 

 

version 2.x.xと3.x.xでは少し挙動が違うらしい
2系では差分比較がすべて終わってからファイルの転送が開始されるが
3系ではファイルの差分比較をしながら並行してファイル転送される

 

基本的な使い方

rsync [オプション] [コピー元] [コピー先]

 

これでコピー元にあるファイルがすべてコピー先にコピーされる

ここまでは普通にcpコマンドを使えば良さそうだが、rsyncのすごいところは豊富なオプション

 

便利そうなオプションまとめ

 

-a 元のパーミションやグループを保持したまま同期できる。基本的に付けておいてよい
-c チェックサムを比較する
-v 処理中の経過ファイル名を表示する(-vvで詳細を表示できる。-vvvでさらに詳細に表示できる)
-q 余計な情報を表示させないようにする
-n 実行時の動作だけを表示する。テストなどに利用
-m 空のディレクトリはコピーしない(version2.x.xでは使えない)

-r 指定したディレクトリ下の各ディレクトリも再帰的にバックアップする
-u 追加されたファイルだけをコピーする
-z ファイルを圧縮する
--existing 更新されたファイルだけをコピーし、追加されたファイルは無視する
--delete コピーもとで削除されたファイルはコピー先でも削除する。(-aオプションと同時にし予定するとコピー先と元を完全に同期することになる)

 


基本的に-acvあたりを付けておけば問題ないはず
-qはcronなどで時間を指定してバックグラウンドで動かす場合に便利

 

注意点


転送元のパスの末尾に/を付けるか付けないかでrsyncの結果が変わってくる

基本的に/で終わるとそのディレクトリ内のものをすべてコピーする。つまり/*と同じ意味で使われる

そのディレクトリを含めてコピーした場合   :/を付けない
そのディレクトリ以下の構造をコピーしたい場合:/を付ける