Para responder à sua pergunta : rsync
, de acordo com o meu conhecimento, não tem alguma forma incorporada de saber que algum programa separado que você está executando ( navegador da Web, etc.) está modificando ativamente um arquivo.
Dado seu tipo de backup (executando sobre a mesma origem e destino a cada 30 minutos), você pode obter a remoção eventual de quaisquer arquivos intermediários com nomes diferentes do arquivo final (por exemplo, download_1.zip.tmp
pode ser um arquivo intermediário para download_1.zip
) adicionando a opção --delete
ao comando.
Durante a primeira execução de rsync
, o arquivo download_1.zip.tmp
será copiado para seu local de backup. Supondo que o download seja concluído em 30 minutos, o arquivo intermediário download_1.zip.tmp
será renomeado para download_1.zip
. Na execução seguinte de rsync
, rsync
não encontraria mais o arquivo intermediário download_1.zip.tmp
(porque foi renomeado para download_1.zip
) e removeria download_1.zip.tmp
e substituiria por download_1.zip
no backup. Isso também removerá quaisquer outros arquivos do seu backup ( /mnt/dsbackup
) que não existam mais na origem ( /mnt/datastore
).
A partir da página man do rsync
(versão 3.1.0):
This tells rsync to delete extraneous files from the receiving side (ones that aren’t on the sending side), but only for the directories that are being synchronized. You must have asked rsync to send the whole directory (e.g. "dir" or "dir/") without using a wildcard for the directory’s contents (e.g. "dir/*") since the wildcard is expanded by the shell and rsync thus gets a request to transfer individual files, not the files’ parent directory. Files that are excluded from the transfer are also excluded from being deleted unless you use the --delete-excluded option or mark the rules as only matching on the sending side (see the include/exclude modifiers in the FILTER RULES section).