はじめに

こんにちは!今回はrsyncコマンドについて解説します。

rsyncは、ファイルやディレクトリを効率的に同期・バックアップするコマンドです。差分だけを転送するので、大容量のバックアップやリモートサーバーとの同期に最適。サーバー管理やバックアップ自動化の現場で毎日使われるコマンドですね。

「超スマートなファイルコピー&同期ツール」って感じです。

rsyncコマンドとは

rsyncは、ローカル、またはリモートのファイルやディレクトリを同期する外部コマンドです。“remote sync"の略ですね。

cpやscp の違いは、rsyncは差分検知 が得意なところ。既に同じファイルが存在していれば、変わった部分だけを転送します。だから、大容量のデータや定期的なバックアップに最適なんです。圧縮転送、削除ファイルの同期、タイムスタンプ保持など、バックアップに必要な機能が揃っています。

基本構文

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

コピー元にホスト名を含める場合はリモート転送になります。host:pathの形式です。

主なオプション

オプション 説明
-a アーカイブモード(-rlptgoD と同等)
-v 詳細表示(verbose)
-z 転送中に圧縮
-r ディレクトリを再帰的に処理
--delete コピー先に存在して、コピー元に無いファイルを削除
-e ssh SSH経由で転送
--exclude 除外パターンを指定
--progress 転送進捗を表示
-u 新しいファイルのみ転送(update)
--backup 上書きファイルのバックアップを作成

使用例

例1: 基本的なローカルコピー

1
rsync -a source/ destination/

実行結果:

1
(成功時は何も表示されない。-vで詳細表示可)

source/ディレクトリの内容をdestination/にコピーします。-aでアーカイブモード(所有者、権限、タイムスタンプ保持)。

例2: 詳細表示でコピー

1
rsync -av source/ destination/

実行結果:

1
2
3
4
5
6
7
sending incremental file list
./
file1.txt
file2.txt

sent 1,234 bytes  received 56 bytes  2,580.00 bytes/sec
total size is 5,000  speedup is 3.88

-vで転送ファイルと統計情報が表示されます。

例3: リモートサーバーへのバックアップ

1
rsync -avz --delete /home/user/data/ [email protected]:/backup/data/

実行結果:

1
2
sending incremental file list
(...ファイル一覧...)

ローカルの/home/user/data/をリモートサーバーの/backup/data/に同期。-zで圧縮転送、--deleteでコピー先の余分なファイルを削除。

例4: リモートからローカルへのダウンロード

1
rsync -avz [email protected]:/var/www/backup/ ./backup/

実行結果:

1
2
receiving incremental file list
(...ファイル一覧...)

リモートサーバーのファイルをローカルにダウンロード。

例5: 差分のみ同期(効率的)

1
rsync -av --progress source/ destination/

実行結果:

1
2
3
4
file1.txt
  100%   1.23MB     2.45MB/s    0:00:00
file2.txt
  100%   456KB      1.23MB/s    0:00:00

--progressで各ファイルの転送進捗を表示。差分だけが転送されます。

例6: 特定ファイルを除外してコピー

1
rsync -av --exclude='*.log' --exclude='cache/' source/ destination/

実行結果:

1
2
3
4
sending incremental file list
file1.txt
file2.md
(...ログファイルはスキップ...)

*.logファイルとcache/ディレクトリを除外してコピー。

例7: SSHで安全にリモート転送

1
rsync -avz -e ssh /local/path/ [email protected]:/remote/path/

実行結果:

1
2
sending incremental file list
(...ファイル一覧...)

-e sshで SSH経由で転送。パスフレーズ認証やSSH鍵を使った安全な転送。

例8: バックアップファイルを作成

1
rsync -av --backup source/ destination/

実行結果:

1
2
sending incremental file list
(古いファイルは~付きでバックアップ)

上書きされるファイルをfilename~の形式でバックアップ。

例9: 日付付きバックアップ

1
rsync -av /home/user/docs/ /backup/docs_$(date +%Y%m%d)/

実行結果:

1
2
sending incremental file list
(/backup/docs_20260103/ に保存)

日付を含むディレクトリ名でバックアップ。

例10: 大容量ファイルの転送(圧縮)

1
rsync -avz --compress-level=9 large_backup.tar /remote/backup/

実行結果:

1
2
large_backup.tar
  100%   2.5GB    10.5MB/s    0:04:00

圧縮レベルを指定して、大容量ファイルを効率的に転送。

Tips・注意点

スラッシュの有無に注意

1
2
3
4
5
# source/直下のファイルをコピー
rsync -av source/ destination/

# sourceディレクトリ自体をコピー
rsync -av source destination/

最後のスラッシュで動作が変わります。ディレクトリ構造が変わるので要注意。

–deleteは慎重に

1
rsync -av --delete source/ destination/

--deleteを使うと、コピー先に存在してコピー元に無いファイルが削除されます。データ消失のリスクがあるので、重要なファイルは事前にバックアップ。

大容量転送は–partialで中断対応

1
rsync -av --partial --progress large_backup.tar remote:/backup/

転送途中で失敗した場合、--partialで部分ファイルが残り、次回は続きから転送できます。

実践的な使い方

定期バックアップスクリプト

1
2
3
4
#!/bin/bash
SOURCE="/home/user/important"
BACKUP="/backup/$(date +%Y%m%d)"
rsync -avz --delete "$SOURCE" "$BACKUP"

毎日実行するcronスクリプト。日付付きで完全同期バックアップを作成。

サーバー間のデータ同期

1
rsync -avze ssh --delete /var/www/app/ [email protected]:/var/www/app/

本番サーバーにコードをデプロイ。差分だけ転送されるので高速。

開発環境から本番環境への資産転送

1
2
rsync -avz --exclude='.git' --exclude='node_modules' --exclude='*.log' \
  /local/project/ deploy@server:/app/project/

不要なディレクトリを除外して転送。容量節約と転送高速化。

まとめ

rsyncコマンドのポイント:

  • ファイル・ディレクトリの効率的な同期・バックアップ
  • -a: アーカイブモード(タイムスタンプ・権限保持)
  • -z: 圧縮転送(リモート転送に最適)
  • –delete: コピー先の不要ファイルを削除(要注意!)
  • -e ssh: SSH経由で安全に転送
  • 差分検知: 変わった部分だけ転送するから高速
  • よく使う組み合わせ: rsync -avz --delete --progress

バックアップやサーバー同期の場面で大活躍。一度覚えると手放せなくなるコマンドですよ!