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

15

O rsync é uma boa escolha para o meu projeto?

Eu tenho que:
- copiar arquivos da pasta de origem para destino via SSH,
- certifique-se de que todos os arquivos foram copiados,
- excluir arquivos de origem após a cópia.
- se eu tiver um nome de conflito, eu tenho que renomear arquivos.

Parece que posso usar a opção: --remove-source-files (para excluir arquivos de origem)
Mas como o rsync gerencia o conflito, posso ter regras?

Caso de uso no meu projeto:

Eu executo o cálculo científico no servidor A e os resultados são inseridos na pasta "process", para cada cálculo eu tenho um repositório como este: / process / calc1.
Agora gostaria de transferir o repositório "/ calc1" para o servidor B (eu recebo / process / calc1) e excluir "calc1" do servidor A.
... Durante outro cálculo eu recebo "/ process / calc2" no servidor A, a idéia é também mover "calc2" no diretório "/ process /" no servidor B, então eu tenho agora no servidor B:
- / process / calc1
- / process / calc2
(e / process / no servidor A está vazio).

Como o rsync gerencia o conflito (no servidor B) se eu tiver outra pasta como "/ process / calc1" no servidor A depois de um novo cálculo (se "/ process / calc1" já existir no servidor B)?

É possível adicionar regras ao rsync e renomear "/ process / calc1" por "process / calc1R2" no servidor B? E assim por diante (ex: calc1R3)?

Obrigado.

    
por user44782 03.06.2010 / 00:20

3 respostas

11

Se você realmente quiser usar o rsync, parece que você precisará de uma combinação de --backup, --backup-dir e --suffix. O mais próximo que eu acho que você pode conseguir é 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 que você deseja. A opção --suffix anexa texto ao final de um arquivo existente, mas só faz isso para o primeiro conflito. Se você executá-lo novamente, ele substituirá seu primeiro backup. Você teria que alterar esse valor de sufixo toda vez que o comando fosse executado, o que funcionaria se você usasse algo com um timestamp, 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.

    
por 03.06.2010 / 02:49
1

Como o nome indica, o 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 o que você quer fazer.

Parece que você só quer mover alguns arquivos. Você não precisa usar o rsync para isso. Parece que você está usando um linux ou BSD. Você poderia usar mv -n sobre ssh. A opção -n não sobrescreve os arquivos existentes. Isso não é 100% automático. No entanto, não vejo como o arquivo já poderia existir no seu caso. Os arquivos serão copiados da origem para o destino e depois removidos da origem. Você quer executar os mesmos cálculos novamente? É por isso que você vai acabar com arquivos com o mesmo nome? Sugiro acrescentar um número de execução ou lote ao nome da pasta. Você quer que seja claro de qualquer maneira. Você tem algum controle sobre como a pasta é nomeada? Mais detalhes? Eu recomendaria colocar os comandos em um script bash ou similar.

    
por 03.06.2010 / 02:25
-1

Para SSH, em resumo, use isto:

Access via remote shell:

Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]

Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

Tudo é explicado em rsync (1).

Quanto ao script para um cronjob, para rsync por ssh automaticamente sem requerer uma senha, procure em ssh-agent (1) também.

    
por 09.09.2010 / 12:08