はじめに
rsync
は、ディレクトリ・ファイルをローカルあるいはリモートマシンと同期させるコマンドである。
rsyncコマンドは、タイムスタンプやファイルサイズを見て、 更新ファイルを検出して差分のみを同期することで、 通信コストを抑えてバックアップあるいは同期が行える。
今回、rsyncのインストールから、その使い方とオプションを解説する。
rsyncのインストール
#Macでのインストール brew install rsync #or brew reinstall rsync #パス確認 which rsync #/usr/local/bin/rsync #CentOS7でのインストール sudo yum install rsync
rsyncの使い方
rsyncの使い方は、rsyncのオプションに加えて、 同期元と同期先のディレクトリを引数として与える。
#基本形(1) rsync -av [同期元ディレクトリ] [同期先ディレクトリ] #基本形(1'): その逆も可能 rsync -av [同期先ディレクトリ] [同期元ディレクトリ] #基本形(1''): スラッシュつきで実行 rsync -av [同期元ディレクトリ]/ [同期先ディレクトリ]
[同期元ディレクトリ]と[同期先ディレクトリ]を入れ替えても実行が可能である。
ここで、同期元ディレクトリのパスの最後に「/」を付けない場合、ディレクトリごとコピー
する。一方、最後に「/」を付ける場合、対象ディレクトリ内のファイルをコピー
する。
#基本形(2)ローカル=>リモートマシンで同期 rsync -avuc [同期元ディレクトリ] [ユーザー名]@[IPアドレス]:[同期先ディレクトリのフルパス] #基本形(2')リモートマシン=>ローカルで同期 rsync -avuc [ユーザー名]@[IPアドレス]:[同期先ディレクトリのフルパス] [同期元ディレクトリ]
リモートマシンとの通信には、そのマシンのパスワード入力が必要である。また、リモートマシンとの同期には、同期先ディレクトリのフルパスあるいはホームパス(~/)を使用する。
次に、ssh経由で通信するrsync実行は、-e ssh
オプションで指定する。
#基本形(3)ローカル=>リモートマシンで同期 + ssh通信 rsync --avuc --stats -e ssh [同期元ディレクトリ] [ユーザー名]@[IPアドレス]:[同期先ディレクトリのフルパス] #基本形(3')リモートマシン=>ローカルで同期 + ssh通信 rsync --avuc --stats -e ssh [ユーザー名]@[IPアドレス]:[同期先ディレクトリのフルパス] [同期元ディレクトリ]
このとき、--stats
オプションを付与すると、完了後に、統計情報が表示される。-c
オプションで、チェックサムを行う
バッチファイルでのrsyncコマンドの実行
例えば、シェルファイル(.sh)あるいはバッチファイル(.command)を用意すると、[同期元ディレクトリ]を引数として与えて、特定の同期先とのファイル同期を行うこともできる。
#!/bin/bash MY_DIRNAME=$(dirname $0) cd $MY_DIRNAME cd ../ rsync -ahuv -e 'ssh -P 22 -i [秘密鍵のパス]' \ $1 [ユーザー名]@[IPアドレス]:[同期先ディレクトリのフルパス] exit #Macでは実行可能 #osascript -e 'tell application "Terminal" to quit' & exit
ここで、$1
は実行ファイルの第一引数にくるリテラルが代入される。
3-5行目は特に不要かも。
rsyncのオプション一覧
オプション | 概要 |
---|---|
-e ssh |
SSH経由でrsync実行 |
-v |
rsyncの詳細表示 |
--stats |
転送(同期)完了後に、統計情報の表示 |
--size-only |
タイムスタンプを無視して、ファイルサイズのチェックだけを行う |
-c, --checksum |
同じサイズのファイルについてチェックサムを行う |
-h, --human-readable |
数字を読みやすい単位で表示 |
--progress |
転送の進行状況の表示 |
-a |
-rlptgoDオプション(–recursive –links –perms –times –group –owner –devices)と同じ |
-av |
-rlptgoDオプション + 詳細表示 |
-r |
ディレクトリを再帰的コピー |
-l |
シンボリックリンクを DEST で作り直す。 |
-p |
DEST のパーミッションを SOURCE と同じにする。 |
-t |
ファイルの転送時に、修正時間情報もリモートへ転送 |
-g |
DEST の所有グループを SOURCE と同じにする。 |
-o |
DEST の所有者を SOURCE と同じにする。 |
-D |
デバイスファイルとスペシャルファイルを維持する。 |
-u, --update |
同期先のファイルの方が新しいときは、上書きしない |
-z |
圧縮通信 |
-4 |
IPv4使用 |
-6 |
IPv6使用 |
--delete | 同期元にないファイルを同期先から削除する |
--delete-before | 同期先にないファイルを同期前に削除する |
--delete-during,--del | 同期先にないファイルを同期中に削除する |
--delete-delay | 同期中に削除すべきファイルを見つけて、後で削除する |
--delete-after | 同期先にないファイルを同期終了後に削除する |