rsyncコマンド

rsync は、ファイルやディレクトリを効率的に同期するためのコマンドで、ネットワーク経由でのデータ転送にも対応している。
デフォルトではSSHとは無関係であるが、オプションを指定することで SSHをトンネルとして利用できる。
パスワード認証方式の場合はパスワードを問われ、公開鍵認証方式では設定が済んでいればそのまま転送が開始される。

rsyncがインストールされていない場合、以下のコマンドでrsyncをインストールする

$ sudo apt update
$ sudo apt install rsync


書式: rsync オプション ローカルホストのファイルパス/ファイル名.拡張子 リモートホストのユーザ名@IPアドレスまたはドメイン名:リモートホストのディレクトリパス

書式: rsync オプション リモートホストのユーザ名@IPアドレスまたはドメイン名:リモートホストのファイルパス/ファイル名.拡張子 ローカルホストのディレクトリパス


1. ローカルホストからリモートホストへ転送する場合:
$ rsync -avz -e ssh "/home/user/Desktop/sample.txt" server@IPaddress_or_domainname:/home/server/test

実行結果:
sending incremental file list
sample.txt

sent 3,243 bytes received 35 bytes 6,556.00 bytes/sec
total size is 10,893 speedup is 3.32


2. リモートホストからローカルホストへ転送する場合:
$ rsync -avz -e ssh server@IPaddress_or_domainname:/home/server/test/Book1.xlsx /home/user/Desktop

実行結果:
receiving incremental file list
Book1.xlsx

sent 43 bytes received 9,504 bytes 6,364.67 bytes/sec
total size is 11,985 speedup is 1.26

rsync コマンドの主なオプション
基本的なオプション 内容
-e ssh によって、rsyncがSSH経由で接続するよう指定
-a アーカイブモード: パーミッション、シンボリックリンクなどを保持
-v 詳細表示: 転送されるファイルの情報を表示する
-r 再帰的にコピー: ディレクトリ内のすべてのファイルをコピーする
-u 新しいファイルのみ更新: 送信先のファイルが送信元より新しい場合はスキップ
-n シミュレーション: 実際には転送せず、どのファイルがコピーされるかを確認
転送最適化オプション 内容
-z 圧縮転送: データを圧縮して送信し、ネットワーク帯域を節約
-P -progress(進行状況を表示) + --partial(中断時に部分的なファイルを保持)
--bwlimit=RATE 帯域幅制限: 転送速度を制限(例: --bwlimit=1000 は 1000KB/s に制限)
--ignore-existing 既存ファイルを無視: 送信先に既にあるファイルはスキップ
削除・同期関連のオプション 内容
--delete 不要なファイルを削除: 送信元にないファイルを送信先から削除
--delete-before
--delete-during
--delete-after
削除タイミングの制御(転送前・転送中・転送後)
--exclude=PATTERN 特定のファイルを除外: 例 --exclude='*.tmp'(.tmp ファイルを除外)
--include=PATTERN 特定のファイルのみ含める: --exclude と併用
リモート転送関連のオプション 内容
--rsync-path=PATH リモート側の rsync のパスを指定(例: --rsync-path='/usr/bin/rsync')
-p , --port=PORT SSH ポート指定: -e "ssh -p 2222" という形で利用可能
その他オプション 内容
--checksum チェックサムを使用して差分検出(通常はタイムスタンプとサイズで比較)
--size-only ファイルサイズのみで変更を判断
--remove-source-files 転送後に元のファイルを削除(空ディレクトリは削除されない)
--remove-source-dirs ディレクトリも削除