
Escribí un script bash para hacer copias de seguridad de carpetas y archivos desde una máquina a nuestro servidor de respaldo. Mi objetivo es excluir todos los archivos de más de 6 meses de esta copia de seguridad semanal. Para hacer eso, utilicé un comando de búsqueda para crear un archivo txt que contiene la ruta de estos archivos.
find . -type f -mtime -200 -fprintf $SCRIPT_DIR/Exclusions.txt "%P\n"
Y luego usé la opción "--include-from" de rsync.
rsync . -e ssh -qrtl --exclude-from=$SCRIPT_DIR/Exclusions.txt $USER@$DEST_SRV:$DEST_DIR
El resultado fue que la copia de seguridad funcionó pero no la inclusión. Entonces se hizo una copia de seguridad de todos los archivos, incluso aquellos que tenían más de 6 meses.
¿Cómo puedo hacer por esto?
gracias de antemano
Respuesta1
Según las páginas de manual,
--exclude=PATTERN exclude files matching PATTERN
--exclude-from=FILE read exclude patterns from FILE
--include=PATTERN don't exclude files matching PATTERN
--include-from=FILE read include patterns from FILE
La exclusión se realiza según el patrón de lectura de los archivos y no según los nombres de los archivos en sí.
Estoy de acuerdo en que incluir/excluir archivos según los nombres también podría ser complicado, pero no es así como funciona.
Podrías probar algo como esto para incluir archivos más recientes que hace 1 semana:
--files-from=<(find . -mtime -7 -print0)
Respuesta2
¡Ok, resolví mi problema! La línea "buscar" permanece igual:
find . -type f -mtime -200 -fprintf $SCRIPT_DIR/includes.txt "%P\n"
Y uso la opción "--files-from" en lugar de "--exclude-from"
rsync . -e ssh -qrtl --files-from=$SCRIPT_DIR/includes.txt $USER@$DEST_SRV:$DEST_DIR