Quiero sincronizar múltiples fuentes y me pregunto cuál es la mejor manera de lograrlo.
p.ej
/etc/fstab
/home/user/download
Pensé en 3 soluciones:
- Solución 1
llamada múltiple a rsync
rsync -a /etc/fstab bkp
rsync -a /home/user/download bkp
con: más difícil tener estadística agregada
- Solución 2
crear una tobackup
carpeta que contenga enlace simbólico y usar -L
opciones
sync -aL /home/user/tobackup bkp
con: el contenido de la copia de seguridad no debe contener enlaces simbólicos
- Solución 3
mover archivos a la copia de seguridad y crear un enlace simbólico en la ubicación original
rsync -a /home/user/tobackup bkp
con: alguna configuración manual
Cúal me recomiendas ?
¿Hay una mejor manera?
Respuestas:
Puede pasar múltiples argumentos de origen.
Esto crea
bkp/fstab
ybkp/download
, como los comandos separados que le diste. Puede ser conveniente preservar la estructura fuente en su lugar. Para hacer esto, use/
como fuente y use reglas de inclusión / exclusión para especificar qué archivos copiar. Hay dos maneras de hacer esto:Incluya explícitamente cada archivo, así como cada componente del directorio que lo conduce, con
/***
al final de los directorios cuando desee copiar todo el árbol de directorios:Incluya todos los directorios de nivel superior con
/*/
(para que rsync atraviese/etc
y/home
cuando busque archivos para copiar) y directorios de segundo nivel con/*/*/
(for/home/user
), pero elimine los directorios en los que no se copia ningún archivo. Esto es más conveniente porque no tiene que enumerar a los padres explícitamente. Incluso podría usar en--prune-empty-dirs --include='*/'
lugar de contar el número de niveles, pero esto no es práctico aquí ya que rsync atravesaría todo el sistema de archivos para explorar directorios a pesar de que ninguna de las reglas de inclusión puede coincidir con nada fuera/etc
y/home/user/download
.fuente
Realmente me gusta la respuesta de Gilles, sin embargo, me gustaría agregar que, desde mi punto de vista, el requisito de sincronizar varias carpetas mientras se preserva la estructura del directorio se cumple mejor pasando múltiples argumentos de origen junto con la
--relative
opción.En este caso, podríamos tener algo de la siguiente manera:
lo que resultaría en
bkp/etc/fstab
ybkp/home/user/download
.La mejor parte de esto es que (creo que desde rsync v. 2.6.7) podemos controlar esencialmente qué parte de la estructura de directorios queremos replicar en el receptor.
(Consulte la documentación sobre la
--relative
opción aquí )Entonces, si hiciéramos esto
terminaríamos con
bkp/user1/download
ybkp/user2/download
.fuente
Esto también funciona: llaves, que contienen una lista de fuentes separadas por comas.
Algo similar a lo que sucede cuando invocas sytnax de llaves con cp y ciertas otras utilidades:
fuente
-e