Preciso sincronizar novamente um diretório com um servidor remoto para que todos os arquivos pertencentes ao usuário X e ao grupo Y na máquina de origem (local) sejam mapeados para o usuário W e o grupo Z na máquina (remota) de destino. Se possível, usando ssh como transporte, mas se eu precisar usar o daemon rsync, tudo bem também.
Existe uma maneira de fazer isso? 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 em que meu nome de usuário é X e preciso enviá-los para um servidor da Web em que eles precisam pertencer a um determinado usuário que não possui o mesmo nome ou o mesmo UID do meu usuário. meu computador pessoal.
Não consigo encontrar isso na página de manual do rsync ...
LINUX na máquina local e remota (Ubuntu local, centOS remote)
Comando que tentei: rsync -avz / path / to / local [email protected]: / path / to / remote
fonte
Respostas:
A versão 3.1.0 do Rsync introduziu as opções
--usermap
e--groupmap
exatamente para esse fim. Veja a página do manual .fonte
A última versão (pelo menos 3.1.1) do rsync permite especificar a "propriedade remota":
Altera a propriedade para www-data (também conhecido como PHP / Nginx). Se você estiver usando o Mac como cliente, use o brew para atualizar para a última versão. E no seu servidor, faça o download das fontes dos arquivos e depois "faça"!
fonte
Se você deseja alterar a propriedade dos arquivos para usuários arbitrários, primeiro precisa ser root na caixa de destino.
Eu não acho que exista esse recurso integrado pelo rsync, mas você pode obtê-lo executando um
find
após executar o rsync.Talvez um comando como esse funcione: Por exemplo, traduza do UID 1000 => 505 e UID 1001 => 700:
Se você tiver muitos usuários, considere usar um loop com um mapeamento, no seu idioma de predileção.
Diverta-se.
fonte
id
na sua máquina para ver. Portanto, se você usar os IDs como este, estará assumindo que não há usuário com o mesmo ID na máquina remota e que provavelmente não é verdadeiro.Não sei se entendi que, para se conectar,
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:EDIT em resposta ao comentário do OP.
Se você deseja fazer esse mapeamento de usuário 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
fazer com que você preserve a propriedade, especifique as opções manualmente. Deman rsync
:Portanto,
-a
ativa todas as opções acima, mas você não deseja preservar o grupo ou o proprietário. Este comando deve fazer o que você deseja:Como agora você está efetuando login
mywww
e não preservando mais as informações do proprietário / grupo, as cópias feitas porrsync
pertencerão aomywww
usuário.fonte
-a
habilita as opções de proprietário e grupo de preservação. Veja minha resposta atualizada.-a
fez isso) ii) explica claramente todas as restrições que você possui, você mencionou um único usuário até seu último comentário e iii ) mencione seu sistema operacional. De qualquer forma, a maneira de fazer issorsync
seria copiar um conjunto de arquivos comomywww@remote
e o próximo conjunto comoroot@remote
.-a
que preserva a propriedade. Os exemplos que você deu sugeriram que você só precisava fazer isso para um usuário. De qualquer forma, eu recomendo que você usersync
, basta fazer uma lista dos diferentes arquivos que você deseja copiar para cada usuário e executar vários rsyncs conectando-se à máquina remota com o nome de usuário relevante. Isso será mais simples e seguro.