Tengo un script que usa rsync para sincronizar datos en un escenario remoto -> local. Inmediatamente después de ejecutar el comando rsync, verifique si el código de error es igual a cero o no. Si es cero, se realizan más comandos. Sin embargo, esto no tiene en cuenta el hecho de que rsync podría haberse ejecutado con éxito pero en realidad no ha realizado ningún cambio. Debido a esto, la condición igual a cero se ejecutará independientemente, lo cual es un poco 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
¿Cuál sería el mejor enfoque para expandir esto para verificar si realmente hubo algún cambio basado en el comando rsync que se ejecutó? He leído que el indicador -i puede proporcionar salida a stdout, pero ¿cómo se puede colocar esto en un bloque condicional?
a=$("rsync command")
. Esto sería ejecutar el rsync
comando y almacenar stdout
en a
. Entonces puede ejecutar pruebas ena
| grep /
o algo así, luego verificar el estado de salida de grep con $?
, debería ser 1 si no hubo salida.
-v
entrado allí, por lo que ya está proporcionando la información que necesitas para stdout ... por ejemplo, una lista de archivos que realmente se enviaron. Si nada cambia, eso es justo./
.