あるシステムのサブディレクトリを再同期し、リモートホスト上の同じ親ディレクトリ(存在しない)に配置しようとしています。 rsyncをrootとして使用し、chownを指定すると、リモートシステムの子ディレクトリの所有権は正確ですが、新しく作成された親ディレクトリは正しくなく、親ディレクトリはrootが所有します。 SSHセキュリティルールに違反するいくつかの権限の問題のため、rootとしてこれを行う必要があります(リモートホストのターゲットアカウントのキーは使用できません)。
例:
システムA:
- bob123:bob123 755 - /ホーム/bob123/config/
- bob123:bob123 755 - /home/bob123/configurations/app1/
- bob123:bob123 755 - /home/bob123/configurations/app2/
- ...
システムB:
- bob123: bob123 755 - /ホーム/bob123/(ディレクトリが空です)
システムAのルートとして:
rsync --chown=bob123:bob123 -IHrlptD /home/bob123/configurations/app4 system-b:/home/bob123/configurations/
結果:
- ルート:ルート第755章-/home/bob123/configuration
- bob123:bob123 755 - /home/bob123/configurations/app4
別のオプションを試しましたが、動作し、system-b:/home/bob123/configurations
常にapp4
ディレクトリツリーの所有権と権限が正しいルート(bob123:bob123所有)が所有するオプションが見つかりませんでした。
プッシュが発生した場合は、sshを使用してmkdirを実行できますが、rsyncだけを使用して目的を達成できるかどうか疑問に思います。
アップデート:これが重要かどうかはわかりませんが、システムはrsync 3.1.2とOpenSSH_7.6p1を使用するUbuntu 18.04です。
############ 解決策: ############
助けてくれた@roaimaに感謝!
これ-R
は/./
欠落しているオプションです。また、これらの-go
オプションも含める必要がありました。
私は次のように終わりました。
rsync --chown=bob321:bob321 -IHazR /home/bob123/./configurations/app4 system-b:/home/bob321/
両方のシステムに同じユーザーがいる場合は使用する必要はありませんが、--chown
プロセス所有者が別のリモートシステムに必要です。上記の例では、chownを使用してさまざまな使用法を反映しています。私のスクリプトでは、chownオプションの設定はリモートホストアドレスによって異なります。
-R
このオプションを使用して正しい方向を教えてくれた@roaimaにもう一度感謝します!
答え1
あなたのコマンド(ここでは単純化)は、configurations
転送するディレクトリのリストに含まれていないため、このような転送ルールはchown
適用されません。
rsync -a /home/bob123/configurations/app4 system-b:/home/bob123/configurations/
/home/bob123
ターゲットにすでに存在する場合は、rsync
ターゲットに一致する追加のディレクトリが作成されます/home/bob123/configurations
。次に、app4
ソースファイルまたはディレクトリツリーを新しく作成されたターゲットディレクトリにコピーします。
configurations
トランスポートディレクトリリストに含めるには、-R
(--recursive
)フラグを使用してトランスポートconfigurations
ツリーにソースディレクトリを含めます。
rsync --chown=bob123:bob123 -IHrlptDR /home/bob123/./configurations/app4 system-b:/home/bob123/
bob123
system-b
これを処理するもう1つの方法は、ターゲットユーザーが暗黙的にすべてを所有するようにonでログインすることです。
rsync -Ia /home/bob123/configurations/app4 bob123@system-b:configurations/
-I
PS本当に()が欲しいです--ignore-times
か?必ずしも必要でない限り、このフラグを使用しないでください。