Acredito que o uso de rsyncs embutidos nas opções de exclusão não é o caminho certo para resolver esse problema. Se você fizer algo como o seguinte:
$ rsync -azvP --remove-source-files /dir-src/* host-dst:dir-src/
você pode ficar na situação em que o rsync transfere um arquivo parcialmente preenchido e, em seguida, o exclui. Se o arquivo for recriado com o mesmo nome, o rsync sobrescreverá a cópia na máquina de destino. Assim, você perderá a primeira metade do arquivo.
Talvez você queira considerar isso. Deixe o rsync fazer sua transferência normalmente, então você pode configurar um cronjob que é executado a cada dez minutos e faz algo como isso.
$ find /dir-src -type f -mmin +15 -exec rm -f {} +
Isso localizará todos os arquivos no diretório dir-src
com mais de 15 minutos e os excluirá. Estamos assumindo aqui que o tempo máximo que leva para um arquivo ser preenchido é de 15 minutos. Você pode querer ajustar esse valor para atender às suas necessidades. Além disso, durante os testes, substitua -exec rm -f {} +
por -print
. Isso garantirá que o find apenas pegue os arquivos que deseja excluir antes de executar qualquer operação destrutiva.
Em seu comentário, você diz que tem uma conexão de rede não confiável e teme que o rsync não seja concluído com êxito. Um método para contornar isso poderia ser o seguinte depois de criar um diretório auxiliar:
- A cada 15 minutos, mova todos os arquivos com mais de 15 minutos de
dir-src
paradir-aux
. - A cada 10 minutos, arquivos rsync de
dir-aux
ahost-dst:dir-src
. - A cada 60 minutos, exclua todos os arquivos em
dir-aux
.
Isso garantirá que o rsync tenha a chance de ser executado 5-6 vezes antes que os arquivos sejam excluídos. Dependendo da sua conexão, isso provavelmente é o suficiente. Você pode dimensionar os 60 minutos para cima ou para baixo, dependendo dos resultados do seu teste.