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.