Eu tenho um script que usa o rsync para sincronizar dados em um cenário remoto -> local. Imediatamente após a execução do comando rsync, verifique se o código de erro é igual a zero ou não. Se for zero, outros comandos serão executados. No entanto, isso não leva em conta o fato de que o rsync pode ter sido executado com êxito, mas na verdade não fez nenhuma alteração. Por esse motivo, a condição igual a zero 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 e verificar se realmente houve alguma alteração com base no comando rsync executado. Eu li que o sinalizador -i pode fornecer saída para o stdout, mas como isso pode ser colocado em um bloco condicional?
shell-script
files
rsync
James White
fonte
fonte
-v
lá, por isso já está fornecendo as informações necessárias para sair ... por exemplo, uma lista de arquivos que foram realmente enviados. Se nada mudar, isso é justo./
.a=$("rsync command")
. Isto executar orsync
comando e armazenarstdout
ema
. Em seguida, você pode executar testes ema
| grep /
ou algo parecido e verificar o status de saída do grep$?
, deve ser 1 se não houver saída.Respostas:
Com base nos comentários da minha pergunta original, faça o rsync output para stdout com o sinalizador -i e use uma condição de verificação sem string para ver se alguma coisa realmente mudou na verificação do código de erro. O agrupamento do comando rsync em uma variável permite que a verificação seja feita.
Possível desvantagem: você precisa perder a saída detalhada, mas sempre pode registrá-la em um arquivo.
fonte
Eu queria uma solução mais rigorosa. Não quero grep
Number of created files:
(a mensagem pode estar em outro idioma) ou remover todas as linhas, exceto duas na-v
saída (quem sabe qual resumorsync
será impresso na próxima versão?).Eu descobri que você pode definir o formato do
rsync
log de um, mas não o formato do seu stdout (consulteman rsyncd.conf
).Por exemplo, adicione um "Arquivo alterado!" para cada linha com um arquivo realmente alterado e,
grep
em seguida, para ele:fonte