Posso usar o rsync para mover uma lista de arquivos em diretórios diferentes para um servidor remoto sem efetuar login mais de uma vez?

1

Então, estou tentando escrever um script para fazer backup de vários arquivos de configuração com meu servidor de arquivos ssh, mas não tenho certeza da melhor maneira de fazer isso. Seria bom se eu pudesse preencher um arquivo com caminhos de arquivos absolutos para ambas as máquinas e fazer isso diretamente com o paralelismo ou algo assim. Paralelo tem um script que funciona para um diretório individual , mas eu quero expanda isso para vários locais.

Por exemplo:

/home/$USER/.bashrc --> remoteuser@remoteIP:/home/remoteuser/backup/.bashrc
/home/$USER/.config/i3/config --> remoteuser@remoteIP:/home/remoteuser/backup/.config/i3/config

para uma infinidade de arquivos, bem como indo na direção inversa se o servidor realmente tiver uma cópia mais recente.

remoteuser@remoteIP:/home/remoteuser/backup/.bashrc --> /home/$USER/.bashrc

Eu poderia efetivamente fazer isso para um arquivo usando esses dois comandos, mas eu teria que fazer o login duas vezes.

rsync -vrut -e 'ssh -p portnumber' /home/$USER/.bashrc remoteuser@remoteIP:/home/remoteuser/backup/.bashrc

rsync -vrut -e 'ssh -p portnumber' remoteuser@remoteIP:/home/remoteuser/backup/.bashrc /home/$USER/.bashrc 
    
por T. Zack Crawford 15.10.2018 / 21:37

1 resposta

0

No primeiro caso, o rsync aceita perfeitamente vários operandos de origem e com a opção -R / --relative preservará seus caminhos , então

rsync -R backup/.bashrc backup/.config/i3/config dest:/home/remoteuser

deve resolver você. A opção --no-implied-dirs pode ser usada com ela para ignorar caminhos compartilhados quando você tiver estruturas mais complicadas.

-R, --relative              use relative path names
    --no-implied-dirs       don't send implied dirs with --relative

Para a direção inversa, você pode fazer o mesmo com várias fontes remotas e o rsync deve ser inteligente o bastante para não fazer conexões separadas com o mesmo servidor.

Às vezes, pode ser mais fácil se você estiver fazendo muito isso para criar uma estrutura de diretórios falsa repleta de links simbólicos que inclua apenas os arquivos desejados e use a opção -L com uma única fonte.

Por outro lado, é sempre direcional: você não pode ter um único comando que faça com que ambos os lados tenham a versão mais nova, de modo que isso exigirá dois comandos. Você poderia usar um soquete de controle SSH compartilhado para executá-los na mesma conexão SSH, para que haja apenas um login real - veja ControlMaster e outros na documentação do ssh config.

    
por 15.10.2018 / 21:57