はじめに
rsync はネットワーク越しやローカルのディレクトリ間で、ファイルやディレクトリを高速に同期できるツールです。特に「-avz」オプションの組み合わせは、最もよく使われる定番パターンです。本記事では -avz の意味と、実務で役立つ活用例を詳しく解説します。
-avz オプションの意味
- -a(archive): 再帰的にコピーし、パーミッション・所有者・タイムスタンプ・シンボリックリンクなどをできるだけ正確に保持します。
- -v(verbose): 転送中のファイル名を表示し、進行状況を把握しやすくします。
- -z(compress): データを転送する際に圧縮を行い、特に帯域が狭い環境で速度向上が期待できます。
基本的な使用例
ローカルの /home/user/data/ ディレクトリをリモートサーバ example.com の /backup/ に同期する例です。
rsync -avz /home/user/data/ user@example.com:/backup/
ポイントは、ソースディレクトリの末尾にスラッシュ / を付けるかどうかです。末尾にスラッシュがあると「ディレクトリ内部の内容だけ」を同期し、付けないと「ディレクトリごと」を同期します。
ローカル同士のコピー
ネットワークを介さずに同一マシン上でディレクトリをコピーしたい場合も、-z は無駄にならないように自動で無効化されます。
rsync -av /var/www/ /mnt/backup/www/
SSH のポート番号を指定する
デフォルトの SSH ポート 22 以外を使う場合は、-e オプションで ssh コマンドを指定します。
rsync -avz -e "ssh -p 2222" /data/ user@example.com:/data/
実務で役立つテクニック
- 削除オプション(
--delete)を併用すると、宛先に存在しなくなったファイルを自動で削除できます。 - 除外リスト(
--exclude)で特定のファイルやディレクトリを同期対象から外せます。 - 進捗表示(
--progress)を付けると、大きなファイルの転送状況が分かりやすくなります。
例: バックアップ対象から .git ディレクトリと tmp/ を除外し、削除も同期させる。
rsync -avz --delete \
--exclude='.git/' \
--exclude='tmp/' \
/home/user/project/ \
user@example.com:/backup/project/
まとめ
rsync の -avz は「アーカイブ」「詳細表示」「圧縮」の三つの要素を同時に有効化し、ほとんどのバックアップやミラーリング作業に適しています。オプションを組み合わせることで、削除や除外、カスタム SSH 設定など、様々なシーンに柔軟に対応できます。是非、日常のファイル同期作業に取り入れてみてください。