rsyncコマンドとは
scp
コマンドの上位互換で、
サーバー間でファイルの転送をするときに良く利用されるコマンド。
scp
より優れている点は「差分を確認し、差分があったファイルだけを更新する」ところ。
基本構文
$ rsync オプション 転送元 転送先
大抵の場合はローカルからリモートサーバーに転送すると思うので、
以下のようになる。
$ rsync オプション 転送元 ユーザー名@サーバー名:配置先のディレクトリ
よく使うオプション
よく使うオプションとして、以下のテンプレを覚えておけば良い。
- 転送元:今いるディレクトリ直下にある
hoge/
- 転送先:
example.com
というサーバーの/home/username/fuga/
というディレクトリ - 接続方法:
username
というユーザーを使ってexample.com
サーバーに接続する
$ rsync -nvhzr --stats hoge/ username@example.com:/home/username/fuga/
-n
:ドライラン、これを付けてると実際には転送しない(確認用)-v
:実行情報の詳細を表示する--stats
:最後にファイル数や転送サイズを表示する-h
:ファイルサイズなどを人間が読みやすい形で表示する-z
:転送中のデータを圧縮する-r
:ディレクトリを再帰的にコピーする
一旦上記のコマンドで確認をし、確認が取れたらn
オプションを外して実行するのがベター。
実行例
Next.jsで生成した静的ファイルout/
を転送する場合。
$ rsync -nvhzr --stats out/ username@example.com:/home/username/fuga/
username@example.com's password:
building file list ... done
404.html
favicon.ico
index.html
index.txt
next.svg
thirteen.svg
vercel.svg
404/index.html
blog/index.html
blog/index.txt
# ファイルは一部省略
Number of files: 72
Number of files transferred: 48
Total file size: 1.37M bytes
Total transferred file size: 1.37M bytes
Literal data: 0 bytes
Matched data: 0 bytes
File list size: 1778
File list generation time: 0.002 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 2.08K
Total bytes received: 308
sent 2.08K bytes received 308 bytes 682.86 bytes/sec
total size is 1.37M speedup is 573.62
ディレクトリを転送する際の注意点
転送元のディレクトリに/
をつけるかどうかで挙動が変わる。
/
をつける:転送先で指定したディレクトリと同期するイメージ/
をつけない:転送先で指定したディレクトリの下に転送元のディレクトリを配置するイメージ
out/
└ index.html
上記のようなディレクトリ構成になっていた場合
# outディレクトリとfugaディレクトリを同期
$ rsync -r out/ user@example.com:/home/user/fuga/
# 結果
fuga/
└ index.html
# fugaディレクトリの下にoutディレクトリを作成
$ rsync -r out user@example.com:/home/user/fuga/
# 結果
fuga/
└ out/
└ index.html
まとめ
scp
よりrsync
を使う-n
オプション付けてドライランする- ディレクトリを転送する場合は、ディレクトリの指定方法に注意