【Mac・Linux】scpよりrsyncの方が便利かもしれない

Linux,Mac

こんにちは、しきゆらです

今回は、MacやLinuxに(おそらくデフォルトで)入っているであろうrsyncコマンドについてメモしていきます

 

そもそも、どうしてこれを知ったかという経緯から

 

これまで、Webサイトを作るということを1年半ほど行ってきましたが

その中で、サーバへファイルを送る、ということを何度も行いますよね

 

Windowsを利用しているときはWinSCPを使ってましたが動作が遅くFileZillaを利用していましたが

  1. エディタでコードを書く
  2. FileZilla(WinSCP)でサーバへ転送
  3. PuTTYでサーバへログインしユーザディレクトリに転送したファイルをサーバルートへ移動

という3工程をコードを変更するたびに行っていました

(もっといい方法あるよ!って方は教えて下さい・・・)

 

しかし、毎度手順ごとにウィンドウを切り替えるのは面倒

ということでscpというコマンドを利用すればコマンドだけでファイル転送ができることを知ります

手順の2,3を一つのツールでできるわけです

 

Macを買い、エディタとしてEmacsをメインとして使うようになり

ターミナルだけで全ての作業ができるようになりました

 

scpコマンドでファイルを送信するようになると、いちいち変更したファイルだけを送信するのが面倒になり

ソースが入っているディレクトリごと転送するようになりました

ファイルがたくさんあったり回線が貧弱だと、転送自体に時間がかかるようになります

これをなんとかする方法はないものか

と調べていた時に見つけたのがrsyncでした

 

では、scpとの違いはなんなのか

どのように使うのか

ということを続きに書いていきます


 

rsyncとは

調べてみると、

UNIXシステムにおいて、差分符号化を使ってデータ転送量を最小化し、遠隔地間のファイルやディレクトリの同期を行うアプリケーションソフトウェアである。

Wikipedia – https://ja.wikipedia.org/wiki/Rsync

とWikipediaさんは言っています

どうも、コピー元とコピー先の同期を取ってくれるコマンドのようです

 

scpコマンドとの違いは、ファイルをそのまま送らずに差分を送信する
また、ディレクトリのミラーリングができる
(cpだと、送信元のファイルを消しても、送信先のフィルは残ってしまうがそれをなくすることができる)

コマンドの書式

rsync (オプション) コピー元ファイルorディレクトリ (リモート時: ユーザ名@サーバ名:)コピー先ディレクトリ
# 例(リモート時):ローカルのデスクトップにあるディレクトリhogeをサーバ上の同じ場所に転送
rsync -pr ~/Desktop/hoge user@server_name:~/Desktop

よく使うであろうオプションは以下のとおり

  • -p: パーミッションを保持
  • -v: 処理中のファイル名を出力
  • -r: ディレクトリを再帰的に処理する
  • —progress: 転送中の転送速度を表示
  • —update: 送信先のファイルが新しい場合はスキップする
  • -n, —dry-run: 転送のテスト、実際に送信せず送信した時の結果を出力する

 

scpコマンドとは異なり、ファイルをそのまま送らずに差分を送るため

一回の送信時の容量が小さくなり、転送時間がとても短くなりました

初回は全てを送らなければいけないため効果はないと思いますが、2回目以降は効果絶大だと思います

(そもそも、面倒くさがらずに編集したものを送ればいいだけ)

 

UNIXのコマンドは偉大である

おわり

Posted by しきゆら