¿Cómo puedo hacer que rsync ignore los archivos que faltan?

9

Estoy ejecutando un comando como el siguiente para varios sistemas diferentes:

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

A veces * .log no existe, y eso está bien, pero rsync genera el siguiente error:

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

¿Hay alguna forma de suprimir eso? La única forma en que puedo pensar es usar los filtros de inclusión y exclusión, que me parecen una PITA. ¡Gracias!

Joe Casadonte
fuente

Respuestas:

10

Creo que la respuesta a la pregunta se describe mejor en esta respuesta:

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

--ignore-missing-args

Desafortunadamente, solo las versiones posteriores tienen esta funcionalidad. Estoy ejecutando RHEL 7 con rsync 3.0.9, que no parece tener esta opción.

Jonathan Komar
fuente
2

Para aclarar, ¿simplemente no desea "ver" el error? Para ese caso, simplemente puede redirigir la Salida de error estándar, pero puede terminar perdiendo un error más grave que quizás desee saber.

Ejemplo de salida de error de redireccionamiento

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

Si, por el contrario, solo desea perderse el error en un archivo que no existe, no puede cambiar el filtro rsync * .log y desea evitar el uso de inclusiones, puede envolverlo en un script para continuar en función del condición.

Ejemplo de guion

#!/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 haber sido de ayuda.

krondor
fuente