Copie arquivos pela rede enquanto cria esses arquivos

2

Minha situação: Eu quero copiar um arquivo de um PC para outro. Infelizmente este arquivo não está completo. Existe um processo anexando dados a este arquivo (somente no final).

Existe uma maneira de copiar este arquivo facilmente sem ter que começar do começo cada vez que a ferramenta de cópia pensa, acabou?

Existe, por exemplo, qualquer possibilidade de dizer ferramentas como scp / rsync / o que esperar por exemplo 20 segundos depois de terminar um download - e se o arquivo mudar, basta baixar esse bit extra de dados?

Ou talvez haja uma maneira de permitir que o download comece com o byte X?

Alguém conhece uma solução? Obrigado antecipadamente!

    
por AnnoSiedler 15.12.2015 / 13:46

2 respostas

3

A melhor maneira seria que o processo que está criando o arquivo também criasse o arquivo remoto ao mesmo tempo. Escrevendo diretamente para o local remoto ou usando algo como tee para os dados do pipe para, por exemplo, uma conexão ssh e para um arquivo local. Isso deveria ter sido feito quando você iniciou o processo.

Como o arquivo já está sendo criado, sim, você pode usar rsync para ele. Por padrão, rsync copia apenas os dados atualizados, portanto, se você executar apenas rsync em intervalos de alguns minutos, obterá o que deseja. Você poderia usar uma abordagem de força bruta:

while :; do rsync -u source destination; sleep 20; done

Isso será executado em um loop infinito, copiando source para destination somente se source for diferente. Uma vez terminado o processo que está criando o arquivo, você pode pará-lo com Ctrl + C .

Uma maneira mais elegante seria monitorar o arquivo. Se ele estiver sendo criado em machineA e copiado para machineB , você poderá fazer isso a partir de machineB (isso pressupõe que você tenha sem senha ssh configurado):

while [[ $(ssh machineA md5sum < /path/to/file) != $(md5sum < /path/to/file) ]] do 
    rsync -uv aa b
    sleep 20
done

Observe que isso parará na primeira vez em que os dois arquivos forem iguais. Se o processo de criação de arquivos não for gravado por mais de 20 segundos e depois for retomado, você terá que copiar novamente manualmente.

    
por terdon 15.12.2015 / 14:18
1

Você pode procurar usar o incron para que o rsync seja executado quando o arquivo for alterado, ou seja, IN_MODIFY , se for uma sincronização de arquivos de longo prazo você precisa.

link

link

link

Se for a curto prazo, o último loop while do terdon pode ser mais rápido de configurar.

    
por Brian Huggins 15.12.2015 / 15:26