京橋のバイオインフォマティシャンの日常

データ分析、コマンドライン、プログラミングについての技術資料・自己アップデート・悩み事などをまとめています。現在、DL勉強中。

【LINUX/Macの基本コマンド⑤】ファイル同期コマンド rsync

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 同期先にないファイルを同期終了後に削除する

参考資料

webkaru.net

www.fenet.jp

www.maruko2.com

www.itmedia.co.jp

rsync options · GitHub