rsync – 高速で効率的なファイル転送・同期コマンド

コマンドリファレンス

rsync(remote sync)コマンドは、ファイルやディレクトリを 差分転送 により効率的にコピー・同期できるツールです。
ローカル間のコピーだけでなく、SSH を利用してリモートサーバとの同期も可能で、バックアップやデプロイ作業に広く使われます。

この記事では、初めて rsync を使う人向けに、インストール確認から基本構文、主要オプション、実行例、cpscp との違い、定期実行での活用方法までをまとめて解説します。

インストール確認・インストール方法

多くの Linux ディストリビューションには rsync が標準でインストールされています。まずはバージョンを確認し、なければインストールします。

# インストール済みか確認
rsync --version

# Debian/Ubuntu 系
sudo apt install rsync

# RHEL/CentOS/Rocky 系
sudo dnf install rsync

# macOS(Homebrew)
brew install rsync

Windows では標準搭載されていないため、WSL(Windows Subsystem for Linux)や Cygwin 経由で利用します。

構文(Syntax)

rsync [オプション] [SOURCE] [DEST]
rsync [オプション] [USER@]HOST:SRC [DEST]
rsync [オプション] [SOURCE] [USER@]HOST:DEST

転送元パスの末尾スラッシュに注意

rsync は転送元パスの末尾に / があるかどうかで挙動が変わります。初心者がつまずきやすいポイントなので、実行前に必ず確認してください。

コマンド結果
rsync -av src/ dest/src中身dest/ 直下にコピーされる
rsync -av src dest/src ディレクトリごと dest/src/ としてコピーされる

主なオプション一覧

オプション説明使用例
-aアーカイブモード(再帰コピー・属性保持)rsync -a src/ dest/
-v詳細情報を表示rsync -av src/ dest/
-zデータを圧縮して転送rsync -avz src/ user@host:/backup/
-rディレクトリを再帰的にコピー(-a に含まれる)rsync -r src/ dest/
-hファイルサイズを人が読みやすい単位で表示rsync -avh src/ dest/
-P進行状況を表示し、中断時に再開可能rsync -avP file.iso user@host:/tmp/
--delete転送元にないファイルを削除(同期用)rsync -av --delete src/ dest/
-e "ssh -p PORT"SSH のポートを指定rsync -av -e "ssh -p 2222" src/ user@host:/backup/
--exclude=PATTERN除外するファイルやディレクトリを指定rsync -av --exclude '*.log' src/ dest/
--include=PATTERN特定のファイルを含めるrsync -av --include '*.txt' src/ dest/
--dry-run実際にコピーせずシミュレーションrsync -av --dry-run src/ dest/
--log-file=PATH転送結果をログファイルに記録rsync -av --log-file=sync.log src/ dest/

cp・scp・tarとの違い

同じファイルコピー系コマンドでも、rsynccpscptar では得意分野が異なります。用途に合わせて使い分けましょう。

コマンド差分転送リモート対応主な用途
rsync○(2回目以降は高速)○(SSH経由)バックアップ、リモート同期、デプロイ
cp×(毎回全コピー)×(ローカルのみ)ローカルでの単純コピー
scp×(毎回全コピー)○(SSH経由)1回限りのリモート転送
tar×△(パイプ経由で可能)アーカイブ化・圧縮

実行例

ローカル間でディレクトリをコピー

rsync -av project/ backup/

出力例:

sending incremental file list
file1.txt
file2.txt

sent 1,024 bytes  received 512 bytes  3,072.00 bytes/sec
total size is 2,048  speedup is 1.50

リモートサーバへコピー(SSH使用)

rsync -avz project/ user@example.com:/var/www/html/

リモートからローカルへコピー

rsync -avz user@example.com:/var/log/ ./logs/

差分コピー(途中で中断しても再開可能)

rsync -avP bigfile.iso user@example.com:/tmp/

除外ルールを指定してコピー

rsync -av --exclude '*.log' project/ backup/

完全同期(不要なファイルを削除)

rsync -av --delete src/ dest/

転送内容をシミュレーション(dry-run)

rsync -av --dry-run src/ dest/

出力例:

sending incremental file list
file1.txt
file2.txt

sent 200 bytes  received 50 bytes  500.00 bytes/sec
total size is 1024  speedup is 3.20

エラー例(認証失敗)

rsync -av user@wronghost:/data/ ./backup/

出力例:

ssh: connect to host wronghost port 22: Connection refused
rsync: connection unexpectedly closed (0 bytes received so far)

cronで定期的に自動同期する

rsynccron と組み合わせることで、無人の定期バックアップを構築できます。SSH 鍵認証を設定しておけば、パスワード入力なしで自動実行が可能です。

# 毎日午前3時にリモートサーバへバックアップ
0 3 * * * rsync -avz --delete /var/www/html/ user@example.com:/backup/html/ >> /var/log/rsync-backup.log 2>&1

世代管理を伴う本格的なバックアップ運用や、SSH 鍵認証の設定手順は次の記事で詳しく解説しています。

よくある質問

rsyncとは何の略ですか?

「remote sync(リモート同期)」の略です。ファイルの差分だけを検出して転送するため、2回目以降の同期が高速になります。

rsync -a や -avz はどういう意味ですか?

-a はアーカイブモードで、ディレクトリを再帰的にコピーしつつ、パーミッションやタイムスタンプなどの属性を保持します。-avz はこれに詳細表示(-v)と圧縮転送(-z)を組み合わせたもので、リモート転送時によく使われる定番の組み合わせです。

rsync --dry-run はどう使いますか?

実際にはファイルをコピー・削除せず、実行結果だけをシミュレーションするオプションです。特に --delete を使う前には --dry-run を付けて対象ファイルを確認し、意図しない削除を防ぐことを推奨します。

manページで詳細を確認するには?

man rsync を実行すると、全オプションの説明を含む公式マニュアルをターミナル上で確認できます。

関連コマンド

  • scp : シンプルなファイルコピー(差分機能なし)
  • sftp : SSH を利用した対話的なファイル転送
  • tar : アーカイブ作成や圧縮
  • cp : ローカルでの単純コピー
  • ssh : リモートサーバへの接続

関連記事

備考

  • rsync差分コピー を行うため、2回目以降の転送は非常に高速。
  • SSH を利用するのが一般的で、安全かつ便利にリモートサーバと同期可能。
  • バックアップ用途で --delete を付ける際は、誤削除に注意し --dry-run で確認するのが推奨。
  • Windows 環境では WSL や Cygwin などを通じて利用可能。

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント