次のrsyncコマンドを使用すると、ファイルとディレクトリに対するRWX権限が正しく設定されますが、固定ビットオプションは正しく設定されません。
rsync -rtvz --partial-dir=.rsync-partial --chmod=Da+t,Dg+s,D770,F0740 --progress --stats -e 'ssh -p 19419' "/home/me/test_dir" me@REMOTE_HOST:~
私が理解したところによると、オプションは次のようになります。
最大+t
- すべてのディレクトリには固定ビットが設定されている必要があります(ルート、ディレクトリ所有者、およびファイル所有者のみがそのディレクトリのファイルを削除できます)。
Dg+s
- すべてのディレクトリにはsetGIDが必要です(そのディレクトリで作成されたすべてのファイルはそのディレクトリのグループ所有権を継承します)。
ただし、上記のコマンドを使用すると、REMOTE_HOSTディレクトリに固定ビットとsetGIDビットは設定されません。
REMOTE_HOSTでsshを実行し、同様のコマンドを実行すると、chmod -R a+t test_dir
固定ビットが期待どおりに設定されます。
私はどこで間違っていますか?
編集:私はそれぞれ "--chmod=Da+t,Dg+s", "--chmod=Da+t" "--chmod=Dg+s" "--chmod=a+t"を試しましたが、何もありません試していません。固定ビットは、次のいずれかのオプションを使用して設定できます。
(Ubuntu 16.04、rsync 3.1.1 - マニュアルページからchmodオプションを直接インポートしました)
答え1
rysncには-pフラグを使用する必要があります。
答え2
これらのモードは指定された順序で適用されます。つまり、後続のD770
オプションは前のパターンをオーバーライドし、ディレクトリを正確に770に設定します。順序を次に変更します。
--chmod=D770,F0740,Da+t,Dg+s
答え3
私は同じ問題がありました:「rsyncは親ターゲットのsetgidを保持しません」私が使用するコマンドは次のようになります。
rsync -zrvhtl <source> <destination>
ターゲットでは、ルート上のファイルとフォルダのみが正しいグループに設定されますが、同期されたフォルダにはg + sが提供されないため、すべてのファイルとフォルダにソースグループがあります。 manの例のようにコマンドを実行し、-rオプションのみを追加すると機能します。
rsync --no-p --no-g --chmod=ugo=rwX <source> <destination>
場合によっては、オプションを追加すると、-tがターゲットフォルダ(静的setgid)にこの影響を与えることがわかります。この問題を克服するために-Oを追加しました。
-O, --omit-dir-times rsync に変更時間を保持するときにディレクトリを省略するように指示します。