O rsync é uma boa escolha para o meu projeto?
Eu tenho que:
- copiar arquivos da pasta de origem para a pasta de destino via SSH,
- ter certeza de que todos os arquivos foram copiados,
- excluir os arquivos de origem após a cópia.
- se eu tiver um nome conflitante, terei que renomear os arquivos.
Parece que posso usar a opção: --remove-source-files (para excluir arquivos de origem)
Mas como o rsync gerencia conflitos, posso ter regras?
Caso de uso em meu projeto:
Eu executo cálculos científicos no servidor A e os resultados são inseridos na pasta "processo", para cada cálculo tenho um repositório como este: /process/calc1.
Agora eu gostaria de transferir o repositório "/calc1" para o servidor B (obtenho /process/calc1) e excluir "calc1" do servidor A.
...Durante outro cálculo, recebo "/process/calc2" no servidor A, a ideia também é mover "calc2" no diretório "/process/" no servidor B, então agora tenho no servidor B:
- /process/calc1
- /process/calc2
(e /process/ no servidor A está vazio).
Como o rsync gerenciará o conflito (no servidor B) se eu tiver outra pasta como "/process/calc1" no servidor A após um novo cálculo (se "/process/calc1" já existir no servidor B)?
É possível adicionar regras com rsync e renomear "/process/calc1" por "process/calc1R2" no servidor B? E assim por diante (ex: calc1R3)?
Obrigado.
Responder1
Se você realmente deseja usar o rsync, parece que precisará de alguma combinação de --backup, --backup-dir e --suffix. O mais próximo que eu acho que você poderia chegar é algo assim
rsync -abv --suffix R1 --remove-source-files src/ dst/
Isso seria próximo ao que você deseja, mas não renomearia os arquivos exatamente da maneira desejada. A opção --suffix anexa texto ao final de um arquivo existente, mas só faz isso no primeiro conflito. Se você executá-lo novamente, ele substituirá seu primeiro backup. Você teria que alterar o valor do sufixo toda vez que o comando fosse executado, o que funcionaria se você usasse algo com carimbo de data/hora, como este:
rsync -abv --suffix `date +%Y%m%d%k%M%S` --remove-source-files src/ dst/
Não tenho certeza se isso é um exagero para o que você procura, mas deve atender aos seus requisitos.
Responder2
Como o nome indica, rsync é usado para sincronizar arquivos. Quando "sincronizado", isso significa que os arquivos na origem e no destino são os mesmos. Isso não parece ser o que você quer fazer.
Parece que você deseja apenas mover alguns arquivos. Você não precisa usar o rsync para isso. Parece que você está usando Linux ou BSD. Você poderia usar mv -n sobre ssh. A opção -n não substitui arquivos existentes. Isso não é 100% automático. No entanto, não vejo como o arquivo já existe no seu caso. Os arquivos serão copiados da origem para o destino e depois removidos da origem. Deseja executar os mesmos cálculos novamente? É por isso que você acabará com arquivos com o mesmo nome? Sugiro anexar um número de execução ou lote ao nome da pasta. Você gostaria que isso ficasse claro de qualquer maneira. Você tem algum controle sobre como a pasta é nomeada? Mais detalhes? Eu recomendo colocar os comandos em um script bash ou similar.
Responder3
Para SSH, em resumo, use isto:
Acesso via shell remoto:
Extrair: rsync [OPÇÃO...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPÇÃO...] SRC... [USER@]HOST:DEST
Está tudo explicado em rsync(1).
Quanto ao script para um cronjob, para sincronizar novamente via ssh automaticamente sem exigir uma senha, consulte ssh-agent(1) também.