備忘録とかいろいろ

駆け出しのインフラエンジニアです。自分用のメモです

rsyncコマンドの使い方

rsyncコマンドの使い方をよく忘れるのでまとめておく。

書式

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

注意するのはコピー元の書き方

$ rsync  -avz  ./src ./dst/

のようにすると

$ ls  ./dst/
src

dst以下にsrcディレクトリがそのまま作成される。
srcディレクトリ以下のみをdst以下にコピーするには、
次のようにコピー元に/を付ける

$ rsync  -avz  ./src/  ./dst/

 

オプション

オプション 機能
-a コピー元のパーミッションやグループ情報などを保持。-a は -rlptgoDと同じ
-v 進行状況を詳細に表示。最大3個まで付けられる
-z データを圧縮する
-u 追加、更新されたファイルのみコピー
-n 実際には同期を実行せず、実行時の動作だけを表示
-r ディレクトリを再帰的にコピー
-l シンボリックリンクをそのまま(リンク先は変えずに)コピー
-L シンボリックリンクを通常のファイルのように扱う
-p パーミッションを保持
-t タイムスタンプを保持
-g グループを保持
-o オーナーを保持
-D デバイスを維持する (root のみ実行可能)
-b バックアップを作成する
-h バイト数をわかりやすい単位で表示
--delete コピー元で削除したファイルをコピー先でも削除する
--include=PATTERN 指定したパターンに一致するファイルを動機対象から除外しない
--include-from=FILE ファイルに記述されたパターンと一致するファイルを除外しない
--exclude=PATTERN 指定したパターンに一致するファイルを同期対象から除外する
--exclude-from=FILE ファイルに記述されたパターンと一致するファイルを除外する
--existing 新しいファイルを作成せず、受信側に既に存在するファイルだけを更新する
--status 転送効率を表示

 

使用例

リモートマシンへのコピー
$ rsync  -avz  ./src/  example.com:/dst/

通信にはsshが使用される
rshを使用するには以下のようにする

$ rsync  -avz  -e  rsh  ./src/  example.com:/dst/

同期する(全く同じ構造にする)

「--delete」オプションを付ける

$ rsync  -avz  --delete  ./src/  ./dst/

特定のファイルのみコピーする

「--include」オプションと「--exclude」オプションを使用する
拡張子が「.php」のファイルのみコピーする例

$ rsync  -avz  -n  --include="*.php"  --exclude="*"  ./src/  ./dst/

特定のファイル以外をコピーする

「--exclude」オプションを使用する。
拡張子が「.php」以外のファイルをコピーする例

$ rsync  -avz  -n  --exclude=".php"  ./src/  ./dst/