ホスティングサーバに差分ありファイルのみを一括転送する

以前にエイリアスを用いてホスティングサーバにファイルを転送するコマンドを作って使用していたのですが,コマンドに利用していた scp コマンドはどうやら非推奨になっていたようです.2年も前に.

その代替として利用できるのが rsync で,しかも差分のあるファイルのみを転送できるらしいので,コマンドを書き換えました.

鍵作成・登録

公開鍵・秘密鍵の作成とホスティングサーバへの登録は以前に書いたものと共通です.

https://blog.mktia.com/upload-files-to-hosting-server

リモートサーバへの差分送信

rsync はバックアップをとるときなどに主に使われていたコマンドのようです.

前述のように中身の差分があるファイルのみを転送することができるため,一部のファイルのみを上書きしたいような場合には高速で転送できます.

指定できるオプション

オプション説明
-a-rlptgoD の省略
-v動作状況を表示
-zデータを圧縮して転送
-P進行状況を表示

-rlptdoD はそれぞれディレクトリの再帰コピー,シンボリックはシンボリックリンクでコピー,パーミッションやタイムスタンプ,ファイル所有者・グループはそのまま,デバイスファイルや特殊ファイルを保持,というオプションです.

コマンド

ターミナルで実行する際には以下のようなコマンドになります.

terminal

$ rsync -avzP -e 'ssh -i ~/.ssh/id_rsa' /path/to/original <username>@<hosting address>:/path/to/destination/

-e ssh の部分は rsync ver 2.6.0 以降不要らしいですが,今回は SSH 鍵認証したいので上記コマンドになっています.

また,毎回入力するのは面倒なので適宜変更してエイリアスを作成しておきます.

.zshrc

alias upd="cp -r ~/path/to/dist ~/example.com && rsync -avzP -e 'ssh -i ~/.ssh/id_rsa' ~/example.com <username>@<hosting address>:~/public_html/ && rm -rf ~/example.com"

注意点として,転送元ディレクトリを指定する際に最後尾にスラッシュを入れると,ディレクトリ内部のファイルを転送先ディレクトリに格納します.ディレクトリごと格納したい場合はスラッシュなしで実行します.

最後に

これまで scp を使っていましたが最近回線速度が低下してしまい,元々遅かった転送により時間がかかるようになってしまいました.

rsync に乗り換えたらかなり速くなったので快適に更新できそうで,とってもいい感じです!

参考