2009-10-21 20 views
45

Quiero usar rsync para sincronizar dos directorios en ambas direcciones.RSync: ¿Cómo sincronizo en ambas direcciones?

que se refieren a la sincronización en el sentido clásico (no cómo se entiende en los manuales de rsync):
Quiero actualizar los directorios en ambas direcciones, dependiendo de cuál de ellos está nueva.

¿Esto se puede hacer mediante rsync (preferible en una forma Linux)?
Si no, ¿qué otras soluciones existen?

+2

Creo que en http://serverfault.com/ se obtienen mejores respuestas. – voyager

Respuesta

43

Simplemente ejecútelo dos veces, con el modo "más nuevo" (-u o - indicador de actualización) más -t (para copiar el tiempo modificado del archivo), -r (para carpetas recursivas) y -v (para una salida detallada a ver lo que está haciendo):

rsync -rtuv /path/to/dir_a/* /path/to/dir_b 
rsync -rtuv /path/to/dir_b/* /path/to/dir_a 

Esto no manejará eliminaciones, pero no estoy seguro de que es una buena solución a este problema, con sólo sync'ing periódica.

+1

Como la pregunta era sobre rsync, marcaré esta respuesta como correcta. –

+1

Pero también preguntaste sobre otras soluciones y Unison hizo un mejor trabajo, de lo contrario, nunca mencionaría otra herramienta. Entiendo que quizás tenga circunstancias específicas que favorezcan el uso de rsync. – MaD70

+1

Sheesh, ¿recibe 6 votos por adelantado y todavía se queja? Unison es una solución realmente interesante, y me alegra que lo haya mencionado. :) – jsight

45

¿Conoces Unison File Synchronizer?

Unison es una herramienta de sincronización de archivos para Unix y Windows. Permite dos réplicas de una colección de archivos y directorios a ser almacenados en diferentes hosts (o discos diferentes en el mismo huésped), modificada por separado, y luego puestos al día mediante la propagación de las cambios en cada réplica a el otro. ...

Tenga en cuenta también que es resistente al fracaso:

Unison es resistente al fracaso. Es cuidadoso de dejar las réplicas y sus estructuras privadas propias en un estado sensible en todo momento, incluso en el caso de terminación anormal o fallas de comunicación.

+0

+1. Unison es la mejor manera de hacer esto. Double-rsync es difícil de corregir y no maneja las eliminaciones en absoluto. – Avdi

+0

Sí, Unison es resistente a fallas. Estoy actualizando mi respuesta para enfatizar esto. – MaD70

+2

No había oído hablar de Unison. Usted es responsable de hacerme rehacer mis scripts de respaldo en casa hoy. – voyager

4

Gracias jsight

rsync -urv --progress dir_a dir_b && rsync -urv --progress dir_b dir_a 

Esto daría lugar a la segunda sincronización ocurre inmediatamente después del 1 de sincronización ha terminado. En caso de que la estructura del directorio sea enorme, ahorrará tiempo, ya que no es necesario sentarse antes de la PC. Si la estructura es enorme, retire la verbosa y el progreso material

rsync -ur dir_a dir_b && rsync -ur dir_b dir_a 
1

Uso rsync <OPTIONS> [hostname:]source-dir [hostname:]dest-dir

por ejemplo:

rsync -pogtEtvr --progress --bwlimit=2000 xxx-files different-stuff 

se sincronizará XXX-archivos de diferente material/xxx-archivos .Si different-stuff/xxx-files no existe, lo creará, es decir, lo copiará.

-pogtEtv - sólo montón de opciones para conservar los metadatos de archivos, además de v - verbose y R - recursiva

--progress - Mostrar progreso de la sincronización en tiempo real - super útil si copia archivos de gran tamaño

--bwlimit=2000 - establece la velocidad máxima de copia/sincronización (ancho de banda = ancho de banda)

PS rsync es de suma importancia cuando trabaja en red, en el caso de una máquina local, puede usar comandos como cp.

¡Buena suerte!

-3

si desea sincronizar en ambos sentidos y también activan la eliminación de archivos uso de este siguientes comandos

rsync -u -r --delete dir_a dir_b 
rsync -u -r --delete dir_b dir_a 
+2

Esto eliminará los archivos nuevos en dir_b, así que solo use esto si 'dir_b' no obtiene nuevos archivos. Pero en ese caso, el '--delete' en el segundo comando probablemente sea inútil. –