rsyncコマンドでXサーバーにローカルのファイルを同期する

rsyncコマンドで、以下のように書くと同期できました。

rsync 
  -auvz 
  -e "ssh -i Xサーバーからダウンロードした秘密鍵.key -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 10022" 
  --delete
  --checksum 
  ./ 
  ユーザー名@ホスト名.xserver.jp:/home/ユーザー名/同期したいフォルダ/

(分かりやすいようにオプションや引数ごとに改行していますが、使う際は改行を取り除いてください)

 

このように書くと

  • Xサーバー上の/home/ユーザー名/同期したいフォルダ/(コピー先)
  • ローカルのカレントディレクトリの中身(./)と同期される(コピー元)

という内容になります。

解説

-auvz

まず-auvzというオプションは以下のとおりです。

よく使うオプション(-auvz)
-a, –archive # archive mode; -rlptgoDと同じ
-u, –update # 更新のあったファイルのみ同期
-v, –verbose # 詳細を表示;-vvと”v”を増やすとさらに詳細を表示
-z, –compress # データ転送時に圧縮する

archive mode (= -rlptgoD) の中身
-r, –recursive # ディレクトリの下層まで再帰的に同期
-l, –links # シンボリックをシボリックとして同期
-p, –perms # ファイルの権限(rwx)を保存して同期
-t, –times # ファイルのタイムスタンプを保存して同期
-g, –group # ファイルのグループを保存して同期
-o, –owner # ファイルのオーナーを保存して同期
-D # “–devices –specials”オプションと同じ
, –devices # デバイスファイルを保存して同期
, –specials # 特殊ファイル(.ファイルとか?)を保存して同期

その他
-n, –dry-run # お試し(実際には実行されず、結果だけ表示される)
-h, –progress # データ転送の進捗を表示する
-e, –rsh=COMMAND # リモートシェルを指定する; SSHを使うには、”-e ssh”と記述する
-H, –hard-links # ハードリンクを保存して同期
-x, –one-file-system # ファイルシステムの境界を越さずに同期

引用元:rsync [QumaWiki]

-e “ssh~~”

次に

 -e "ssh -i Xサーバーからダウンロードした秘密鍵.key -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 10022"

の部分は

「rsyncコマンドを実行する前にSSH接続する」という意味です。

Xサーバーからダウンロードした秘密鍵.keyは、Xサーバーの管理画面で事前にダウンロードしておきます。

▲パスフレーズは入力せずに生成します。(パスフレーズを入力してしまうと接続のたびにパスフレーズを尋ねられます)

 

UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no

の部分については以下のページを見てください。

参考UserKnownHostsFileとStrictHostKeyChecking【ssh】

–delete、–checksum

次に

--delete
--checksum

はそれぞれ以下のような意味です。

  • –delete
    コピー元にないファイルやフォルダはコピー先から削除する
  • –checksum
    ファイルの中身に差分がある場合だけ同期する
    (ファイルの中身が同じ場合は、タイムスタンプが違っていてもコピーしない)

 

rsyncは通常、

  • ファイルの中身(というかチェックサム?)
  • タイムスタンプ

の両方が変化しているかどうか、で同期するか決めているらしいです。

コピー元、コピー先

最後の引数2つは

  • コピー元のパス
  • コピー先のパス

です。

 

上の書き方だと

  • コピー元のパス:ローカル
  • コピー先のパス:リモート

になってますが

  • コピー元のパス:リモート
  • コピー先のパス:ローカル

にすることもできます。

 

そんな感じです。

それにしてもrsyncコマンドってかなりややこしいですね・・。
オプション多すぎだし、引数やオプションをミスると「ファイルが全部消えちゃった!」になる可能性もあるので絶対にミスれないという緊張感😫

 

おわり

CI/CD
スポンサーリンク
この記事を書いた人
penpen

1991生まれ。WEBエンジニア。

技術スタック:TypeScript/Next.js/Express/Docker/AWS

フォローする
フォローする

コメント

タイトルとURLをコピーしました