web-dev-qa-db-ja.com

rsyncでユーザー/グループの所有権を任意にマッピングする方法

ソース(ローカル)マシンのユーザーXとグループYに属するすべてのファイルが宛先(リモート)マシンのユーザーWとグループZにマップされるように、ディレクトリをリモートサーバーにrsyncする必要があります。トランスポートとしてsshを使用して可能であれば、rsyncデーモンを使用する必要がある場合も問題ありません。

それを行う方法はありますか?次のような任意のユーザー/グループマップを確立する方法を探しています

local user X => remote user W
local group Y => remote group Z
... and as many of these as needed.

これはかなり一般的なユースケースになるはずですよね?例えば。ユーザー名がXであるローカルコンピューターにファイルがあり、それらをWebサーバーにアップロードする必要があります。ファイルは、私のユーザーと同じ名前または同じUIDを持たない特定のユーザーに属する必要があります。パソコン。

Rsyncのmanページでそれを見つけることができません...

ローカルマシンとリモートマシンの両方でLINUX(Ubuntuローカル、centOSリモート)

私が試したコマンド:rsync -avz/path/to/local [email protected]:/ path/to/remote

17
matteo

Rsync バージョン3.1. が導入されました--usermapおよび--groupmapその目的のためのオプション。 man page を参照してください。

21
Michel Schinz

Rsyncの最新バージョン(少なくとも3.1.1)では、「リモート所有権」を指定できます。

--usermap=tom:www-data

トムの所有権をwww-data(別名PHP/Nginx)に変更します。 Macをクライアントとして使用している場合は、brewを使用して最新バージョンにアップグレードします。そして、サーバー上でアーカイブソースをダウンロードし、「作成」してください。

4
Thomas Decaux

ファイルの所有権を任意のユーザーに変更する場合は、最初に宛先ボックスのrootになる必要があります。

Rsyncに統合されたそのような機能はないと思いますが、rsyncを実行した後にfindを実行することで実現できます。

たぶん、このようなコマンドでうまくいくでしょう:たとえば、UID 1000 => 505およびUID 1001 => 700から変換します:

find /your/rsynced/path -user 1000 -exec chown 505 {} \;
find /your/rsynced/path -user 1001 -exec chown 700 {} \;

多くのユーザーがいる場合は、好みの言語でマッピング付きのループを使用することを検討してください。

楽しんで。

0
Adrien M.