Tabla de Contenidos

Sincronización con rsync(1)

rsync es una utilidad de sincronización remota, es decir que sirve para mantener sincronizado el contenido de dos carpetas en diferentes sistemas. Utiliza un algoritmo que minimiza la cantidad de datos transferidos de un lugar a otro copiando sólamente las partes que cambiaron de un archivo. Es por ello que también se lo utiliza como un cp mejorado.

Uso básico

Como alternativa a ''cp''

Comencemos por ver cómo copiar en el mismo sistema, de una carpeta a otra. Supongamos que tenemos dos carpetas, origen y destino, y queremos que el contenido entre ellas quede igual.

El primer comando que aprenderemos será decirle a rsync que copie recursivamente (es decir las subcarpetas y sus contenidos también), de origen a destino.

  rsync -r origen/ destino
Notar la opción -r que es la que le indica a rsync que la copia es recursiva.

Otra alternativa es indicarle con la opción -a que copie recursivamente preservando los metadatos y archivos especiales (por ejemplo enlaces simbólicos)

  rsync -a origen/ destino
Importante: Notar en los dos ejemplos anteriores que origen está finalizado con una barra /. De esta manera se le señaliza a rsync que copie el contenido de origen y no lo incluya. De otra forma lo que haría sería crear en destino una nueva carpeta llamada origen y volcar allí todo lo copiado.

Otras opciones útiles

Chequear lo que va a suceder

La opción -n o bien –dry-run permite chequear qué es lo que hará rsync sin que realmente se lleve ninguna opción a cabo. Esto generalmente se combina con la opción siguiente para más detalles sobre el procedimiento a realizar.

Salida verborrágica

La opción -v muestra información más detallada de lo normal sobre las acciones y resultados que van sucediendo a medida que se ejecuta rsync.

Copiando entre sistemas remotos

Ahora veremos el área donde rsync se luce. Realizaremos una sincronización donde origen y destino son carpetas en sistemas diferentes. Vamos a suponer que esos sistemas son nuestra PC (en alguna parte de Internet), y el servidor en Texto-Plano (suponiendo que ya tenemos cuenta).

Sincronizando una carpeta en nuestra PC a TP

Supongamos que ahora origen es una carpeta en nuestra PC y destino es una carpeta en nuestro $HOME en Texto-Plano, más precisamente, el path absoluto de destino sería /home/fulana/destino (suponiendo que nuestro usuario es fulana).

Entonces

  rsync -e ssh -a origen/ fulana@texto-plano.xyz:/home/fulana/destino
  

Aquí apareció la opción -e ssh para indicarle a rsync que el medio de conexión con Texto-Plano será mediante ssh.

De manera análoga, si quisieramos sincronizar de Texto-Plano hacia nuestra computadora, el comando sería:

  rsync -e ssh -a fulana@texto-plano.xyz:/home/fulana/origen/ destino
  

Más opciones útiles

Ahora que estamos realizando copias por la red, estas opciones vendrán muy útiles.

Compresión de los datos

La opción -z comprime los datos, rediuciendo la cantidad de información enviada por la red.

Indicación de progreso

Con la opción -P rsync nos indicará el progreso de la sincronización. Ideal para cuando hay mucha info a copiar y queremos saber cómo va avanzando el asunto.

Datos en números legibles

Con la opción -h le decimos a rsync que los números los muestre en una escala más fácil de entender. Usualmente combinada con la opción -P.

Copiar sólamente archivos nuevos o modificados

Con -u sólamente se copian los archivos nuevos o que son más nuevos en la carpeta de origen.

Combinando todo

Es importante aclarar que estas opciones se pueden combinar, de manera que:

  rsync -e ssh -azuhP fulana@texto-plano.xyz:/home/fulana/origen/ destino
  

copiará todo el contenido de la carpeta origen en Texto-Plano (-a), de manera comprimida (-z), copiando archivos nuevos o modificados sólamente (-u), de manera fácil de leer (-h), mostrando el progreso (-P) usando ssh como transporte.

Recuerden que siempre tienen más información con el comando man rsync.