Conseguir que o rsync mova o arquivo da origem para o destino?

15

O rsync é uma boa opção para o meu projeto?

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

Parece que eu 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 corro o cálculo científico no servidor A e os resultados são inseridos na pasta "processo", para cada cálculo eu tenho um repositório como este: / process / calc1.
Agora eu gostaria de transferir o repositório "/ calc1" para o servidor B (recebo / process / calc1) e excluir "calc1" do servidor A.
... Durante outro cálculo, obtive "/ process / calc2" no servidor A, a idéia é 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á conflitos (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 o rsync e renomear "/ process / calc1" por "process / calc1R2" no servidor B? E assim por diante (ex: calc1R3)?

Obrigado.

user44782
fonte

Respostas:

11

Se você realmente deseja usar o rsync, parece que precisará de uma combinação de --backup, --backup-dir e --suffix. O mais próximo que eu acho que você pode chegar é com algo assim

rsync -abv --suffix R1 --remove-source-files src/ dst/

Isso faria o que você deseja, mas não renomeia os arquivos exatamente da maneira que deseja. A opção --suffix anexa o texto ao final de um arquivo existente, mas apenas o faz no primeiro conflito. Se você o executasse novamente, ele substituiria seu primeiro backup. Você precisaria alterar esse valor de sufixo toda vez que o comando fosse executado, o que funcionaria se você usasse algo com um 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.

Paul Kroon
fonte
Posso ter arquivos grandes após o cálculo, por isso é provavelmente melhor usar o rsync (em caso de problemas na rede).
precisa saber é o seguinte
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ê deseja apenas mover alguns arquivos. Você não precisa usar o rsync para isso. Parece que você está usando um linux ou BSD. Você pode usar mv -n sobre ssh. A opção -n não substitui 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 fonte para o destino e depois removidos da fonte. Deseja executar os mesmos cálculos novamente? É por isso que você terminará com arquivos com o mesmo nome? Sugiro acrescentar um número de execução ou lote ao nome da pasta. Você quer que isso fique 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.

d -_- b
fonte
Em alguns casos, tenho que executar o mesmo cálculo novamente (e é por isso que acabo com arquivos com o mesmo nome). Você está certo, acrescentar uma execução é uma boa ideia: encontre também o comando mmv -a (espero que funcione no modo ssh, alguém já usa essa linha de comando?). Eu tenho controle sobre como a pasta é nomeada.
precisa saber é o seguinte
Provavelmente não está instalado na máquina. Se for a sua máquina, você pode instalá-la. Baseado no Debian: sudo apt-get install mmv Você também pode pesquisar em sshfs ou NFS e enviar arquivos diretamente para o destino final. A menos que seja necessário o local intermediário (inspeção, modificação, etc.). Se o vínculo entre as duas máquinas não for confiável, é uma má idéia, é claro. A sugestão de Paulo é boa. No entanto, acrescentar o número da execução no início provavelmente seria mais organizado.
d -_- b
1
Como você usa "mv -n" sobre ssh? Você pode usar mv sobre sshfs.
guettli
Ops ... Sim, isso torna mais claro.
precisa
-1

Para SSH, em resumo, use o seguinte:

Acesso via shell remoto:

Pull: rsync [OPÇÃO ...] [USUÁRIO @] HOST: SRC ... [DEST]

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

Está tudo explicado no rsync (1).

Quanto ao script para um cronjob, para sincronizar automaticamente com o ssh sem exigir uma senha, consulte também o ssh-agent (1).


fonte