rsync

1$ rsync [OPTION]... SRC [SRC]... DEST
2$ rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST

ローカルとリモートのファイルをアップロード/ダウンロードしたいときに使うコマンドです。 ファイルの差分を調べて実行してくれるので便利です。

ファイルをアップロードしたい

1$ rsync -auvz ファイル名1 [ファイル名2]... [ユーザー名@]ホスト名:ディレクトリ名/
2$ rsync -auvz --no-p ファイル名1 [ファイル名2]... [ユーザー名@]ホスト名:ディレクトリ名/

ファイルをアップロードする場合は、とりあえず-auvzをつけて同期すれば問題ないです。 オプションはそれぞれ-a(アーカイブモード)、-u(更新があったファイルを同期)、-v(メッセージ出力)、-z(転送時にデータを圧縮)です。

アーカイブモード

アーカイブモードは-rlptgoDに相当します。 --recursive(再帰的に同期)、 --link(シンボリックリンクをリンボリックリンクとして同期)、 --perms(パーミションを保ったまま同期)、 --times(時刻を保ったまま同期)、 --group(グループを保ったまま同期)、 --owner(オーナーを保ったまま同期)、 --devices(デバイルを保ったまま同期) --special(特殊ファイルを同期)

アーカイブモードから除外したいオプションがある場合は、 それぞれ--no-r / --no-l / --no-p / --no-t / --no-g / --no-o / --no-D で選択できます。

ディレクトリごとアップロードしたい

1$ rsync -auvz ディレクトリ名/ [ユーザー名@]ホスト名:ディレクトリ名/

ローカルのディレクトリの内容を丸ごとリモートサーバーにアップロードできます。 ディレクトリ名の末尾に/(スラッシュ)をつける/つけないで、アップロードされる内容が変わるので注意が必要です。 --dry-runオプションを使って事前に確認をし、作業したい内容に合わせて使い分けてください。

実行内容を事前に確認したい(--dry-run

1$ rsync -auvzn ディレクトリ名/ [ユーザー名@]ホスト名:ディレクトリ名/

-n--dry-run)オプションを使うと、転送される内容を事前に確認できます。

完全に同期したい(--delete

1$ rsync -auvz --delete ディレクトリ名/ [ユーザー名@]ホスト名:ディレクトリ名/

差分同期(--update)でリモートサーバーにアップロードした場合、 手元のコンテンツを削除して再び同期しても、サーバー側にデータが残ったままになってしまいます。 手元とサーバーのコンテンツを完全に同期させたい場合は--deleteオプションを使います。

デフォルトだと、データは転送前に削除(--delete-before)されます。 他にも転送中に削除(--delete-during)、転送後に削除(--delete-after)のオプションがあります。

特定のファイルを除外したい(--exclude

1$ rsync -auvz --exclude ".DS_Store" ディレクトリ名/ [ユーザー名@]ホスト名:ディレクトリ名/
2$ rsync -auvz --exclude=".DS_Store" ディレクトリ名/ [ユーザー名@]ホスト名:ディレクトリ名/
3$ rsync -auvz --exclude-from="除外パターンをまとめたファイル名" ディレクトリ名/ [ユーザー名@]ホスト名:ディレクトリ名/

.DS_Storeなど、サーバーにアップロードする必要がないファイルを除外したい場合は--excludeもしくは--exclude-fromオプションを使います。

除外したいファイルの数が少ない場合は--excludeオプションで十分ですが、多い場合は除外パターンをまとめたファイルを用意して--exclude-fromで読み込ませるのがよいです。