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?
shell-script
files
rsync
James White
fuente
fuente
-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./
.a=$("rsync command")
. Esto sería ejecutar elrsync
comando y almacenarstdout
ena
. 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.Respuestas:
Según los comentarios a mi pregunta original, realice la salida de rsync para stdout con el indicador -i y use una condición de verificación sin cadena para ver si algo realmente cambió dentro de la verificación del código de error. Ajustar el comando rsync en una variable permite realizar la verificación.
Posible inconveniente, debe perder el resultado detallado, pero siempre puede registrarlo en un archivo.
fuente
Quería una solución más estricta. No quiero pelear por
Number of created files:
(el mensaje podría estar en otro idioma) o eliminar todas las líneas excepto dos en la-v
salida (¿quién sabe qué resumenrsync
se imprimirá en la próxima versión?).Descubrí que puede establecer el formato del
rsync
registro de a, pero no el formato de su stdout (veaman rsyncd.conf
).Por ejemplo, agregue un "¡Archivo cambiado!" a cada línea con un archivo realmente cambiado, y luego
grep
para ello:fuente