Tips

`rsync`で差分転送を高速化!安全かつ効率的なファイル同期術

`rsync` は、ローカルやリモート間でファイルを効率的に同期するための強力なコマンドラインツールです。差分転送により初回以降の転送時間を大幅に短縮できるため、バックアップ、デプロイ、開発環境の同期など、様々なシーンで活躍します。

技術・言語・ツール: rsync

rsync は、ローカルやリモート間でファイルを効率的に同期するための強力なコマンドラインツールです。差分転送により初回以降の転送時間を大幅に短縮できるため、バックアップ、デプロイ、開発環境の同期など、様々なシーンで活躍します。

rsyncで差分転送を高速化!安全かつ効率的なファイル同期術

大量のファイルやサイズの大きなファイルを扱う際、変更がないファイルを毎回転送するのは非常に非効率です。rsyncは、転送元と転送先のファイルの内容を比較し、変更された部分や新規ファイルのみを転送することで、データ転送の時間を劇的に短縮します。特に、ネットワーク経由での同期や定期的なバックアップに真価を発揮します。

基本的な同期(ローカルディレクトリ間)

# -a: アーカイブモード(パーミッション、タイムスタンプ、所有者などを保持)
# -v: 詳細表示
# -z: 転送中の圧縮(ネットワーク帯域が限られている場合に有効)
rsync -avz /path/to/source/ /path/to/destination/

リモートサーバーへの同期(SSH経由)

# ローカルからリモートへ
rsync -avz -e ssh /path/to/source/ user@remote.example.com:/path/to/destination/

# リモートからローカルへ
rsync -avz -e ssh user@remote.example.com:/path/to/source/ /path/to/destination/

特定のファイルを同期対象から除外する

# .gitディレクトリとログファイルを同期対象から除外
rsync -avz --exclude '.git/' --exclude '*.log' /path/to/source/ /path/to/destination/

変更を確認するためのドライラン

# 実際に転送は行わず、何が転送されるか(または削除されるか)を表示
rsync -avz --dry-run /path/to/source/ /path/to/destination/

注意点とおすすめポイント

  • パスの末尾の/に注意: 転送元のパスの末尾に/があるかないかで挙動が変わります。
    • /path/to/source/**/ (スラッシュあり): /path/to/source 内のコンテンツ が転送先にコピーされます。
    • /path/to/source (スラッシュなし): /path/to/source ディレクトリ自体 が転送先にコピーされます。
  • --deleteオプションの利用: 転送元に存在しないファイルを転送先から削除する場合に使います。非常に強力なオプションなので、--dry-runと組み合わせて細心の注意を払って使用してください。
  • スクリプトでの自動化: 定期的なバックアップやデプロイのスクリプトに組み込むことで、手作業によるミスを減らし、効率的な運用が可能です。
  • SSH設定の活用: .ssh/config にホスト情報を設定しておけば、-e ssh の代わりに -e "ssh -p 2222" のようにポート指定なども不要になり、よりシンプルにコマンドを記述できます。