概要
rsyncコマンド(manページへのリンク)の
- --chmodオプション
- 同期先のパーミッションを設定する
- --chownオプション
- 同期先のユーザ・グループを設定する
の挙動のクセで詰まったので、備忘録として残します。
想定ケース
- リモートIPアドレス:remote_IP の端末に
- ユーザ:remote_user でSSH接続して
- リモート端末のディレクトリ:/remote_dir 配下のファイル・ディレクトリすべてを、
- ローカル端末のディレクトリ:/local_dir へ同期する
remote_dirの構成
remote_dir
|-- aaa.file
|-- fuga_dir
| `-- bbb.file
`-- hoge_dir
`-- ccc.file
local_dirの構成
- 配下にディレクトリ・ファイルなし。
- パーミッション:rwxr-xr-x
- 所有者:before_user
- グループ:before_group
local_dir
0 directories, 0 files
コマンドと実行結果
対象ディレクトリの指定方法によって、3通りの結果がある
- 末尾に**「/」なし**
⇒対象ディレクトリを丸ごと同期 - 末尾に**「/」あり**
⇒対象ディレクトリより下の階層を同期、同期先ディレクトリのパーミッション・ユーザ・グループ上書き - 末尾に**「/*」あり**
⇒対象ディレクトリより下の階層を同期、同期先ディレクトリのパーミッション・ユーザ・グループ上書き
1.末尾に「/」なし
- remote_dirがそのままlocal_dir直下に同期される
- remote_dirも含めて、同期されたファイル・ディレクトリのパーミッション・ユーザ・グループが
--chmod,--chownで指定したもので設定される - local_dirのパーミッション・ユーザ・グループは実行前と変化なし
[実行コマンド]
rsync -pogr \
--chmod=D775,F664 \
--chown=after_user:after_group \
-e "ssh -p 22" remote_user@source_IP:/remote_dir local_dir
[実行結果]
local_dir //rwxr-xr-x before_user:before_group
`-- remote-dir //rwxrwxr-x after_user:after_group
|-- aaa.file //rwxrwxr-x after_user:after_group
|-- fuga_dir //rwxrwxr-x after_user:after_group
| `-- bbb.file //rwxrwxr-x after_user:after_group
`-- hoge_dir //rwxrwxr-x after_user:after_group
`-- ccc.file //rwxrwxr-x after_user:after_group
2.末尾に「/」あり
- remote_dir より下にあるファイル・ディレクトリ がlocal_dir直下に同期される
- 同期されたファイル・ディレクトリと、local_dirのパーミッション・ユーザ・グループが
--chmod,--chownで指定したもので設定される
[実行コマンド]
rsync -pogr \
--chmod=D775,F664 \
--chown=after_user:after_group \
-e "ssh -p 22" remote_user@source_IP:/remote_dir/ local_dir
[実行結果]
local_dir //rwxrwxr-x after_user:after_group
|-- aaa.file //rwxrwxr-x after_user:after_group
|-- fuga_dir //rwxrwxr-x after_user:after_group
| `-- bbb.file //rwxrwxr-x after_user:after_group
`-- hoge_dir //rwxrwxr-x after_user:after_group
`-- ccc.file //rwxrwxr-x after_user:after_group
3.末尾に「/*」あり
末尾に「/」のみだと、local_dirのパーミッション等が上書きされてしまう。
これを回避するには、「/*」を対象ディレクトリ指定に追加する。
- remote_dirより下にあるファイル・ディレクトリがlocal_dir直下に同期される
- 同期されたファイル・ディレクトリのパーミッション・ユーザ・グループが
--chmod,--chownで指定したもので設定される - local_dirのパーミッション・ユーザ・グループは実行前と変化なし
[実行コマンド]
rsync -pogr \
--chmod=D775,F664 \
--chown=after_user:after_group \
-e "ssh -p 22" remote_user@source_IP:/remote_dir/* local_dir
[実行結果]
local_dir //rwxr-xr-x before_user:before_group
|-- aaa.file //rwxrwxr-x after_user:after_group
|-- fuga_dir //rwxrwxr-x after_user:after_group
| `-- bbb.file //rwxrwxr-x after_user:after_group
`-- hoge_dir //rwxrwxr-x after_user:after_group
`-- ccc.file //rwxrwxr-x after_user:after_group
まとめ
rsyncコマンドは対象ディレクトリ指定で大きく挙動が変わるので、
気を付けましょう……