rsync

sparseオプションを調べる。

使用例

$ man rsync
rsync [OPTION]... SRC [SRC]... DEST

同一ディレクトリがSRCDESTに存在する。

sampleディレクトリを例にする。 ディレクトリ構造は以下のとおり。

/var/www/html
  |
  |-- sample

カレントディレクトリの/var/www/html/sampleディレクトリの内容をリモートの/home/example/sampleディレクトリにコピー。

# 例1 推奨
$ cd /var/www/html
$ rsync -ahv sample/ example.com:/home/example/sample/
// rsync -ahv sample/ example.com:/home/example/sample も同じ挙動だが↑で統一
# 例2 非推奨
# この場合 sampleディレクトリのなかの`.`で始まるファイル(.envなど)がコピーされないことに注意する
# この方法は分かりづらいので避ける
$ cd /var/www/html
$ rsync -ahv sample/* example.com:/home/example/sample/
# 例3 非推奨
# この場合は /home/example/sampleディレクトリの中にsampleディレクトリが作成される
# この方法は分かりづらいのでなるべく避ける
$ cd /var/www/html
$ rsync -ahv sample example.com:/home/example/sample/

以下の方法でも例1と同じ結果になる。 この方法でも良い。

# 例4 推奨
# 例3 非推奨とはコピー先のディレクトリ階層がことなることに注意
$ cd /var/www/html
$ rsync -ahv sample example.com:/home/example/
// $ rsync -ahv sample example.com:/home/example でも同じ挙動だが↑で統一
  • $ rsync -ahv sample example.com:/home/example/sampleだと/home/example/sampleのなかにsampleディレクトリを作成する(/home/example/sample/sampleが作成される)
    • つまりSRCのスラッシュあり、なしで挙動がことなることに注意。
  • *ありの場合は.で始まるファイルを同期しない

ref. https://qiita.com/shnagai/items/7403411b4aa193d0fa0d

オプション

-a を指定することでなるべくコピー元のファイルと同一条件でコピーする。
-h でファイルサイズの視認性をよくする。
-v で詳細を出力する。
-n または –dry-run で対象ファイルを確認する。
–max-size で転送対象のファイルサイズの上限を指定できる。
-z –compress データ転送時に圧縮

ref. https://qiita.com/bezeklik/items/22e791df7187958d76c1

-u コピー元とコピー先を比較し、追加・更新されたファイル・ディレクトリのみをコピーします。

ref. https://webkaru.net/linux/rsync-command/

秘密鍵の指定

i オプションはない(SSH は i オプションで秘密鍵を指定できるが rysnc はできない)。

秘密鍵を指定するには以下のように記載する。

$ cd /var/www/html
$ rsync -e 'ssh -i /path/to/private_key' -ahv sample/ ubuntu@example.com:/home/example/sample/
// 同様にポート番号の指定も以下のようにする
$ rsync -e 'ssh -p  -i ' -ahv sample/ ubuntu@example.com:/home/example/sample/

ref. rsyncで公開鍵を指定してデータ転送する方法

除外

  • --exclude--exclude={'dir/','file.txt'}という形式で複数指定可能
  • --exclude-from: 除外リストを保存したファイルを指定

除外リストの記載方法がtarとは異なることに注意する。

var/cache/
var/log/
var/sessions/
.git/

末尾に / をつけると、対象がフォルダーのときのみマッチする。

ref. http://tech.nitoyon.com/ja/blog/2013/03/26/rsync-include-exclude/?utm_source=pocket_mylist

# 例4 の形式で特定ディレクトリを除外
$ rsync -ahv --exclude-from='excludes.txt' sample esample.com:/home/example/