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