Como faço para que o rsync ignore os arquivos ausentes?

9

Estou executando um comando como o seguinte para vários sistemas diferentes:

$ rsync -a -v [email protected]:'/path/to/first/*.log path/to/second.txt' /dest/folder/0007/.

Às vezes * .log não existe, e tudo bem, mas o rsync gera o seguinte erro:

receiving file list ... rsync: link_stat "/path/to/first/*.log" failed: No such file or directory (2)
done

Existe alguma maneira de suprimir isso? A única maneira de pensar é usar filtros de inclusão e exclusão, que me parecem uma PITA. Obrigado!

Joe Casadonte
fonte

Respostas:

10

Eu acho que a resposta para a pergunta é melhor descrita nesta resposta:

https://stackoverflow.com/a/27637277/1236128

--ignore-missing-args

Infelizmente, apenas versões posteriores têm essa funcionalidade. Estou executando o RHEL 7 com o rsync 3.0.9, que parece não ter essa opção.

Jonathan Komar
fonte
2

Para esclarecer, você gostaria de não "ver" o erro? Nesse caso, você pode apenas redirecionar a Saída de erro padrão, mas pode acabar perdendo um erro mais sério do que você pode querer saber.

Exemplo de saída de erro de redirecionamento

rsync -a -v [email protected]:'/path/to/first/*.log path/to/second.txt' /dest/folder/0007/ 2>/dev/null

Se, em vez disso, você estiver procurando apenas perder o erro em um arquivo que não existe, não poderá alterar o filtro rsync * .log e deseja evitar o uso de inclusões, você pode envolvê-lo em um script para prosseguir com base no doença.

Exemplo de script

#!/bin/sh
# Script to Handle Rsync based on Log File Existence
if [ "$(ls -A /path/to/first/*.log > /dev/null > 2&1)" ]; then
     # Log Exists Use This Rsync
    rsync -a -v [email protected]:'/path/to/first/*.log path/to/second.txt' /dest/folder/0007/
else
    # Log Does Not Exist Use This Rsync
    rsync -a -v [email protected]:'path/to/second.txt' /dest/folder/0007/
fi

Espero ter ajudado.

Krondor
fonte