Obtendo o rsync para mover o arquivo da origem para o destino?

Obtendo o rsync para mover o arquivo da origem para o destino?

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.

informação relacionada