bash - sincronizar - ¿Cómo mantener dos carpetas sincronizadas automáticamente?
sincronizar usb con pc (3)
Necesita algo como esto: https://github.com/axkibe/lsyncd Es una herramienta que combina rsync e inotify; la primera es una herramienta que refleja, con las opciones correctas establecidas, un directorio hasta el último bit. Este último le dice al kernel que notifique a un programa los cambios en un directorio o archivo. Dice:
Agrega y combina eventos durante unos segundos y luego genera uno (o más) procesos para sincronizar los cambios.
Pero, según Digital Ocean en https://www.digitalocean.com/community/tutorials/how-to-mirror-local-and-remote-directories-on-a-vps-with-lsyncd , debería estar en el repositorio de Ubuntu!
Tengo requisitos similares, y esta herramienta, que aún no he probado, parece adecuada para la tarea.
Me gustaría tener una copia sincronizada de una carpeta con todo su subárbol.
Debería funcionar automáticamente de esta manera: cada vez que creo, modifico o elimino cosas de la carpeta original, esos cambios deberían aplicarse automáticamente a la carpeta de sincronización.
¿Cuál es el mejor enfoque para esta tarea?
BTW: Estoy en Ubuntu 12.04
El objetivo final es tener una copia de seguridad separada en tiempo real, sin el uso de enlaces simbólicos o montaje. Utilicé Ubuntu One para sincronizar los datos entre mis computadoras, y después de un tiempo algo salió mal y todos mis datos se perdieron durante una sincronización.
Así que pensé en agregar un paso más para mantener una copia de seguridad de mis datos:
- Mantengo mis datos almacenados en una "carpeta A"
- Necesito la respuesta de mi pregunta actual para crear una sincronización unidireccional de "carpeta A" a "carpeta B" (¿podría ser una secuencia de comandos
cron
conrsync
?). Necesito que sea de ida solo de A a B, cualquier cambio a B no debe aplicarse a A. - Simplemente mantengo la "carpeta B" sincronizada con Ubuntu One.
De esta manera, cualquier cambio en A se aplicará a B, que se detectará desde U1 y se sincronizará con la nube. Si algo sale mal y U1 borra mis datos en B, siempre los tengo en A.
Inspirado por los comentarios de lanzz, otra idea podría ser ejecutar rsync en el inicio para hacer una copia de seguridad del contenido de una carpeta en Ubuntu One e iniciar Ubuntu One solo después de que se complete rsync.
¿Qué piensas sobre eso? ¿Cómo saber cuándo termina rsync?
Puede usar inotifywait
(con las modify,create,delete
marcas habilitadas) y rsync
.
while inotifywait -r -e modify,create,delete /directory; do
rsync -avz /directory /target
done
Solo una simple modificación de @silgon responde:
while true; do inotifywait -r -e modify,create,delete /directory rsync -avz /directory /target done
(La versión @silgon a veces falla en Ubuntu 16 si la ejecutas en cron)