元のサーバーには、ルートという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
ますが理解できない場合は、+
少し効率の悪いバリエーション\;
(バックラッシュセミコロンなど)に変更してください。