Rsync com o proprietário do destino e permissão possível?

0

Servidor de origem com um proprietário é raiz.

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

Minha máquina local é o destino.

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

Como posso sincronizar o novo formulário do arquivo de atualização Servidor de origem para a máquina local e não alterar o proprietário local?

Editar

Eu preciso sincronizar todas as fontes em um comando porque muitas pastas e máquinas locais possuem muitos proprietários também. Pode ser possível?

Obrigado.

    
por Chonlathit Wanpean 22.06.2016 / 04:08

3 respostas

1

Parece que você não quer que eles mudem após a transferência.

Experimente o comando abaixo:

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

Se você não usar essas opções, o usuário e o grupo serão alterados para o usuário solicitante no final do recebimento. Se você quiser especificar algum outro usuário, você precisará adicionar um comando chown ao seu script.

-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
    
por 24.06.2016 / 13:52
1

Eu acho que uma boa opção para você pode ser apenas rsync da origem ao destino normalmente, assumindo que é uma transferência física separada do sistema de arquivos, usando algo como

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

e, quando tudo é copiado para o lugar certo no novo sistema, descubra que novos UIDs seu sistema forneceu os dados do sistema de origem. É provavelmente 1001, 1002 etc. Nesse caso, você pode facilmente fazer um

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

Sim, você teria que fazer a última coisa 100 vezes, mas você poderia facilmente criar um script, se você conhecer a sequência UID usada durante o rsync. Eu fiz exatamente isso uma vez, migrando cerca de 60 usuários de um servidor para outro, e funcionou razoavelmente bem. Eu também precisava substituir permissões de grupo, acordo semelhante;

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

Coisas assim. Espero que você possa usar isso.

    
por 10.04.2017 / 14:24
1

Você não pode fazer isso em um comando. No entanto, mesmo com mais de 100 usuários, é bastante simples automatizar a tarefa, por isso não vejo por que você insiste que deve ser um comando.

Você precisa extrair os dados da máquina de destino nesse cenário. Teoricamente, seria possível direcionar a transferência do servidor de origem, tunelando um rsync sobre um túnel reverso ssh que seria consideravelmente mais complicado.

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

Se você não tiver o sinal --chown , poderá emular isso com um processo de duas etapas:

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

Se você precisar usar o find variant e seu find não entender + , substitua-o pelo pouco eficiente \; (que é o ponto-e-vírgula de folga).

    
por 12.12.2016 / 23:43

Tags