Sincronice un directorio local con un directorio remoto en Linux

14

Tengo una carpeta con algunos archivos y algo de espacio en un servidor web. Quiero hacer una sincronización bidireccional entre la carpeta local y la remota en Linux, solo en el momento de la modificación. ¿Cómo hago esto? Por cierto, no puedo instalar nada en el servidor, para todos los efectos es solo espacio.

Nota: Ya tengo configurados pares de claves rsa, para que pueda suceder en silencio.

Andrew Redd
fuente

Respuestas:

12

La herramienta de elección para la sincronización unidireccional es rsync, y la herramienta de elección para la sincronización bidireccional es Unison . Ambos requieren que el ejecutable esté disponible en ambos lados. Si puede hacer que un archivo sea ejecutable en el lado del servidor, suelte el binario al unísono y hágalo ejecutable.

Si tiene Linux, * BSD, Solaris o Mac OS X localmente, probablemente pueda usar un sistema de archivos FUSE para que el espacio del servidor web aparezca como un sistema de archivos local: sshfs debería funcionar ya que parece tener acceso ssh. Luego use al unísono "localmente".

También tenga en cuenta que la mayoría del software de control de versiones (CVS / Subversion, así como VCS distribuido) tienen sincronización como una función por cierto (verifique en una máquina y salga en la otra).

Gilles 'SO- deja de ser malvado'
fuente
4

Si está instalado en el servidor, use rsyncsu compilación para exactamente ese trabajo.

Para hacerlo bidireccional, haga esto (cita de http://forums11.itrc.hp.com/service/forums/questionanswer.do?admit=109447626+1285799008594+28353475&threadId=1278777 ):

Para sincronizar bidireccionalmente un directorio /src/fooen el hostAque /dest/fooel hostB, incluyendo todos los subdirectorios, debe ejecutar estos comandos en hostA:

rsync -auz /src/foo hostB:/dest 
rsync -auz hostB:/dest/foo /src

El primer comando desplaza al resto de los archivos que son más recientes en hostAa hostB.

El segundo comando se tire de todos los archivos que son más recientes en hostBa hostA. Las opciones críticas son:

al copiar, debe conservar los tiempos de modificación del archivo. -ahace esto y otras cosas;

Si desea conservar solo los tiempos de modificación, use -ten su lugar.

Para omitir cualquier archivo que sea más nuevo en el destino: -uhaga esto.

tante
fuente
por lo que he leído, rsync no es bidireccional y cuando lo intento me da el error "no coinciden las versiones del protocolo, ¿está limpio su shell?"
Andrew Redd
hostanswers.net/linux-hosting/rsync-protocol-version-mismatch podría ayudarlo a solucionar el problema de desajuste de la versión. Para lo bidireccional, actualicé mi respuesta.
tante
1
Rsync no está adaptado a la sincronización bidireccional en absoluto. Por un lado, no te avisará si hay un conflicto. Use Unison en su lugar, es la herramienta adecuada para el trabajo.
Gilles 'SO- deja de ser malvado'
1
Esto se rompe horriblemente si el servidor A está en el futuro del servidor B. En mi caso, estoy 13 horas por delante del servidor remoto.
Tim Post
1

Cada vez que necesite una sincronización entre dos carpetas rsynces una excelente opción flexible. El problema es que rsync no admitirá el protocolo ftp. Una buena solución para esto es curlFtpFS :

CurlFtpFS es un sistema de archivos para acceder a hosts FTP basados ​​en FUSE y libcurl.

Con curlFtpFs es bastante fácil incluir una carpeta ftp remota en su sistema de archivos.

Este es un breve ejemplo que muestra el uso de ambas herramientas:

curlftpfs -r -s ftp.foobar.com /foo
rsync -a /foo/ /bar
umount /foo

Lea la página de manual para más información.

Si no desea ese esfuerzo para instalar curlFtpFS y solo desea mantener algunos archivos sincronizados, hay muchas herramientas ftp que ofrecen tales funciones de sincronización:

  • FTPSync.pl : secuencia de comandos PERL simple para mantener sincronizados un directorio local y uno remoto
  • weex : un cliente FTP no interactivo para actualizar páginas web
  • filezilla : cliente FTP GUI con muchas funciones
  • ...
echox
fuente
1. Rsync no es bueno para la sincronización bidireccional , use Unison en su lugar. 2. ¿De dónde vino FTP? la mención de claves RSA en la pregunta sugiere ssh (y, por lo tanto, sshfs).
Gilles 'SO- deja de ser malvado'
Tienes razón, FTP no se menciona en la pregunta. Para ser honesto, creo que fue una combinación de "espacio web" y "es solo espacio". y un poco de mi fatiga ayer.
echox