ターゲットの所有者と権限でRsyncを実行できますか?

ターゲットの所有者と権限でRsyncを実行できますか?

元のサーバーには、ルートという1人の所有者がいます。

----/home/sub1/test1 
----/home/sub2/test1

私のローカルコンピュータはターゲットです。

----/home/sub1/test1 owner by user1
----/home/sub2/test1 owner by user2

ローカル所有者を変更せずに元のサーバーの新しい更新ファイルをローカルコンピュータに同期する方法は?

編集する

フォルダも多く、ローカルコンピュータにも所有者が多いため、1つのコマンドですべてのソースを同期する必要があります。たぶん可能ですか?

ありがとうございます。

答え1

移転後に変更したくないようです。

次のコマンドを試してください。

rsync -avr -o -g /source/directory user@:destinationHost/destination/directory

このオプションを使用しない場合、ユーザーとグループは受信側から呼び出すユーザーに変更されます。他のユーザーを指定するには、スクリプトにchownコマンドを追加する必要があります。

-o, --owner
    This option causes rsync to set the owner of the destination file to be 
    the same as  the source file, but only if the receiving rsync is being run 
    as the super-user (see also the --super and --fake-super options). Without 
    this option, the owner of new and/or transferred files are set to the invoking 
    user on the receiving side...

-g, --group
    This option causes rsync to set the group of the destination file to be the same as 
    the source file. If the receiving program is not running as the super-user (or if
    --no-super was specified), only groups that the invoking user on the receiving side
    is a member of will be preserved. Without this option, the group is set to the default
    group of the invoking user on the receiving side...

SEE MAN rsync

答え2

私の考えに良いオプションは、次のようなものを使用して別々の物理ファイルシステムを転送すると仮定し、ソースからターゲットに通常rsyncすることです。

rsync -e 'ssh -p 22' -quaxz --bwlimit=1000 --del --no-W --delete-excluded --exclude-from=/excludedstufflist /sourcedir serverIP:/destinationdir

次に、新しいシステムの正しい場所にすべてコピーしたら、システムがソースシステムのデータにどの新しいUIDを提供したかを調べます。 1001、1002などになります。この場合、簡単に行うことができます

find /destinationdir -user 1001 -exec chown username '{}' \;
find /destinationdir -user 1002 -exec chown otherusername '{}' \;
etc.

はい、最後の操作を100回実行する必要がありますが、rsync中に使用されるUIDシーケンスがわかっている場合は、簡単にスクリプトを作成できます。一度は、約60人のユーザーをあるサーバーから別のサーバーに移行したことがありました。また、グループ権限、同様の処理を変更する必要があります。

chown --from=oldguy newguy * -R
chown --from=:friends :family * -R

このような。これが使えることを願っています。

答え3

単一のコマンドではこれを行うことはできません。ただし、ユーザーが100人を超える場合でも、この作業を自動化するのは非常に簡単なので、なぜコマンドでなければならないと主張するのか理解できません。

あなたはする必要があります引くこの場合、データはターゲットコンピュータから提供されます。理論的には、rsync逆方向トンネルをssh介したトンネリングを介して送信元サーバーからの転送を駆動することが可能ですが、これははるかに複雑です。

for testdir in /home/sub*/test1
do
    owner=$(stat -c %u "$testdir")
    rsync -avP --chown "$u" sourceserver:"$testdir"/ "$testdir"/
done

そのフラグがない場合は、--chown次の2段階のプロセスでシミュレートできます。

for testdir in /home/sub*/test1
do
    owner=$(stat -c %u "$testdir")
    rsync -avP --no-owner sourceserver:"$testdir"/ "$testdir"/
    chown -R "$u" "$testdir"                   # If possible
    # find "$testdir" -exec chown "$u" {} +    # Otherwise
done

findこのバリアントを使用する必要がありfindますが理解できない場合は、+少し効率の悪いバリエーション\;(バックラッシュセミコロンなど)に変更してください。

関連情報