rsyncコマンド

ローカルシステムとリモートシステム間、またはローカルディレクトリ間でファイルとディレクトリを同期します。

概要

rsyncは、場所間でファイルを効率的に転送・同期する高速で多機能なファイルコピー・同期ツールです。ソースと宛先の間の差分のみをコピーするため、後続の転送では通常のコピーコマンドよりもはるかに高速です。セキュアなリモート転送のためにSSH経由で動作することも、ローカルディレクトリ間で動作することもできます。

オプション

-a, --archive

アーカイブモード。権限、所有権、タイムスタンプを保持し、ディレクトリを再帰的にコピーします。

$ rsync -a /source/directory/ /destination/directory/

-v, --verbose

詳細表示を増やし、転送されるファイルと最後に要約を表示します。

$ rsync -av /source/directory/ /destination/directory/
sending incremental file list
file1.txt
file2.txt
directory/
directory/file3.txt

sent 1,234 bytes  received 42 bytes  2,552.00 bytes/sec
total size is 10,240  speedup is 8.04

-z, --compress

転送中にファイルデータを圧縮して、帯域幅の使用量を削減します。

$ rsync -az /source/directory/ user@remote:/destination/directory/

-P, --partial --progress

転送中の進捗状況を表示し、部分的に転送されたファイルを保持します。

$ rsync -avP large_file.iso user@remote:/destination/
sending incremental file list
large_file.iso
    153,092,096  14%   15.23MB/s    0:01:12

--delete

ソースに存在しない宛先のファイルを削除し、宛先を正確なミラーにします。

$ rsync -av --delete /source/directory/ /destination/directory/

-n, --dry-run

変更を加えずに試験実行を行います。

$ rsync -avn --delete /source/directory/ /destination/directory/

-e, --rsh=COMMAND

使用するリモートシェルを指定します(通常はオプション付きのssh)。

$ rsync -av -e "ssh -p 2222" /source/directory/ user@remote:/destination/

-u, --update

宛先の方が新しいファイルをスキップします。

$ rsync -avu /source/directory/ /destination/directory/

--exclude=PATTERN

指定したパターンに一致するファイルを除外します。

$ rsync -av --exclude="*.log" /source/directory/ /destination/directory/

使用例

ローカルディレクトリの同期

$ rsync -av /home/user/documents/ /media/backup/documents/
sending incremental file list
report.docx
presentation.pptx
notes.txt

sent 15,234 bytes  received 85 bytes  30,638.00 bytes/sec
total size is 45,678  speedup is 2.98

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

$ rsync -avz --delete ~/documents/ [email protected]:/backup/documents/
sending incremental file list
./
report.docx
presentation.pptx
notes.txt

sent 45,678 bytes  received 612 bytes  9,258.00 bytes/sec
total size is 45,678  speedup is 0.99

リモートサーバーからのダウンロード

$ rsync -avz [email protected]:/remote/directory/ /local/directory/
receiving incremental file list
./
file1.txt
file2.txt
directory/
directory/file3.txt

received 10,240 bytes  received 214 bytes  6,969.33 bytes/sec
total size is 10,240  speedup is 0.98

ウェブサイトのミラーリング(特定のファイルを除外)

$ rsync -avz --delete --exclude="*.tmp" --exclude=".git/" /local/website/ user@server:/var/www/html/

ヒント:

末尾のスラッシュを慎重に使用する

ソースの末尾にスラッシュがあると「このディレクトリの内容をコピーする」という意味になり、スラッシュがないと「このディレクトリとその内容をコピーする」という意味になります。この微妙な違いによって、コピーされるものが大きく変わる可能性があります。

ハードリンクを保持する

転送されるファイル間のハードリンクを保持する必要がある場合は、-Hまたは--hard-linksオプションを使用します。

大きな転送には帯域制限を使用する

ネットワーク経由の大きな転送には、--bwlimit=KBPSを使用して帯域幅の使用量を制限します(例:--bwlimit=1000で1000KB/秒に制限)。

バックアップスナップショットの作成

rsyncと--link-destオプションを組み合わせて、変更されていないファイルにハードリンクを使用する効率的なバックアップスナップショットを作成し、ディスク容量を節約します。

$ rsync -av --link-dest=/backups/daily.1 /source/ /backups/daily.0/

よくある質問

Q1. rsyncはscpとどう違いますか?

A. rsyncはファイル間の差分のみを転送するため、後続の転送がはるかに高速です。また、同期、属性の保持のためのオプションが多く、中断された転送を再開することもできます。

Q2. 実際に実行する前にrsyncが何をするかをテストするにはどうすればよいですか?

A. -nまたは--dry-runオプションを使用して、変更を加えずに何が転送されるかを確認できます。

Q3. すべての属性を保持しながらファイルを同期するにはどうすればよいですか?

A. -a(アーカイブ)オプションを使用します。これは-rlptgoD(再帰的、リンク保持、権限、時間、グループ、所有者、特殊ファイル)と同等です。

Q4. rsyncはソースに存在しない宛先のファイルを削除できますか?

A. はい、--deleteオプションを使用して、宛先をソースの正確なミラーにすることができます。

Q5. 特定のファイルやディレクトリを除外するにはどうすればよいですか?

A. 個々のパターンには--exclude=PATTERNを使用し、ファイルからパターンを読み込むには--exclude-from=FILEを使用します。

参考文献

https://download.samba.org/pub/rsync/rsync.html

改訂履歴