Rsync versão 3.1.0 introduziu o --usermap
e o --groupmap
opções precisamente para esse fim. Veja a página de manual .
Eu preciso rsync um diretório para um servidor remoto para que todos os arquivos pertencentes ao usuário X e grupo Y na máquina de origem (local) sejam mapeados para o usuário W e grupo Z na máquina de destino (remota). Se possível, usando ssh como o transporte, mas se eu precisar usar o daemon rsync, tudo bem.
Existe uma maneira de fazer isso? Eu estou procurando uma maneira de estabelecer um mapa de usuário / grupo arbitrário, como
local user X => remote user W
local group Y => remote group Z
... and as many of these as needed.
Este deve ser um caso de uso bastante comum, não é? Por exemplo. Eu tenho arquivos no meu computador local onde meu nome de usuário é X, e preciso enviá-los para um servidor da Web onde eles precisam pertencer a um determinado usuário que não tenha o mesmo nome ou o mesmo UID do meu usuário no meu computador pessoal.
Não consigo encontrar isso na página man do rsync ...
LINUX na máquina local e remota (local do Ubuntu, centOS remoto)
Comando Eu tentei: rsync -avz / path / to / local [email protected]: / caminho / para / remoto
Rsync versão 3.1.0 introduziu o --usermap
e o --groupmap
opções precisamente para esse fim. Veja a página de manual .
A última versão (pelo menos 3.1.1) do rsync permite que você especifique a "propriedade remota":
--usermap=tom:www-data
Altera a propriedade do tom para www-data (também conhecido como PHP / Nginx). Se você estiver usando o Mac como cliente, use brew para atualizar para a última versão. E no seu servidor, faça o download de fontes de arquivos e, em seguida, "faça" isso!
Se você quiser alterar a propriedade dos arquivos para usuários arbitrários, primeiro será necessário fazer o root na caixa de destino.
Eu não acho que haja um recurso desse tipo integrado pelo rsync, mas você pode achá-lo executando um find
depois de fazer o seu rsync.
Talvez, um comando como esse faça o truque: Por exemplo, traduza do UID 1000 = > 505 e UID 1001 = > 700:
find /your/rsynced/path -user 1000 -exec chown 505 {} \;
find /your/rsynced/path -user 1001 -exec chown 700 {} \;
Se você tiver muitos usuários, considere o uso de um loop com um mapeamento em sua linguagem de predilecção.
Divirta-se.
Não tenho certeza se entendi, para se conectar com ssh
você precisa fornecer um nome de usuário. Esse nome de usuário será o usuário W na máquina remota que pertence ao grupo Z. Portanto, tudo será transferido exatamente como você deseja:
rsync /path/to/local [email protected]/path/to/remote
EDIT em resposta ao comentário do OP.
Se você deseja fazer esse mapeamento de usuários e não perder as configurações de permissões, não use -a
. Primeiro, execute o rsync com [email protected]
para obter o nome de usuário correto. Em seguida, em vez de -a
, que fará com que você preserve a propriedade, especifique as opções manualmente. De man rsync
:
-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
-r, --recursive recurse into directories
-l, --links copy symlinks as symlinks
-p, --perms preserve permissions
-t, --times preserve modification times
-g, --group preserve group
-o, --owner preserve owner (super-user only)
-D same as --devices --specials
Portanto, -a
ativa todas as opções acima, mas você não quer preservar o grupo ou o proprietário. Este comando deve fazer o que você quer:
rsync -rlptDvz /path/to/local [email protected]:/path/to/remote
Como agora você está efetuando login como mywww
e não está mais preservando as informações do proprietário / grupo, as cópias feitas por rsync
pertencerão ao usuário mywww
.
Tags rsync ownership user user-groups