rsyncは、chownオプションを使用したときに新しく作成された親ディレクトリの所有権を設定しません。

rsyncは、chownオプションを使用したときに新しく作成された親ディレクトリの所有権を設定しません。

あるシステムのサブディレクトリを再同期し、リモートホスト上の同じ親ディレクトリ(存在しない)に配置しようとしています。 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/

bob123system-bこれを処理するもう1つの方法は、ターゲットユーザーが暗黙的にすべてを所有するようにonでログインすることです。

rsync -Ia /home/bob123/configurations/app4 bob123@system-b:configurations/

-IPS本当に()が欲しいです--ignore-timesか?必ずしも必要でない限り、このフラグを使用しないでください。

関連情報