Como posso verificar se o rsync fez alguma alteração no bash?

7

Eu tenho um script que usa o rsync para sincronizar dados em um controle remoto - > cenário local. Imediatamente após o comando rsync ser executado, verifique se o código de erro é igual a zero ou não. Se seu zero, outros comandos são executados. No entanto, isso não leva em consideração o fato de que o rsync pode ter sido executado com êxito, mas não fez nenhuma alteração. Por causa disso, a condição zero igual será executada independentemente, o que é um pouco redundante.

rsync -aEivm --delete /path/to/remote/ /path/to/local/

if [ $? -eq 0 ]; then
    # Success do some more work!
else
    # Something went wrong!
    exit 1;
fi

Qual seria a melhor abordagem para expandir isso para verificar se realmente houve alterações com base no comando rsync executado. Eu li que -i flag pode fornecer saída para stdout, mas como isso pode ser colocado em um bloco condicional?

    
por James White 25.04.2015 / 14:36

1 resposta

6

Com base nos comentários da minha pergunta original, faça a saída do rsync para stdout com o sinalizador -i e use uma condição de verificação sem cadeia de caracteres para ver se algo realmente foi alterado na verificação do código de erro. Envolver o comando rsync em uma variável permite que a verificação seja feita.

RSYNC_COMMAND=$(rsync -aEim --delete /path/to/remote/ /path/to/local/)

    if [ $? -eq 0 ]; then
        # Success do some more work!

        if [ -n "${RSYNC_COMMAND}" ]; then
            # Stuff to run, because rsync has changes
        else
            # No changes were made by rsync
        fi
    else
        # Something went wrong!
        exit 1
    fi

Potencial desvantagem, você tem que perder a saída detalhada, mas você sempre pode registrá-la em um arquivo.

    
por 25.04.2015 / 22:33