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.
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 arsync
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 queorigen
está finalizado con una barra/
. De esta manera se le señaliza arsync
que copie el contenido deorigen
y no lo incluya. De otra forma lo que haría sería crear endestino
una nueva carpeta llamadaorigen
y volcar allí todo lo copiado.
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.
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
.
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).
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
Ahora que estamos realizando copias por la red, estas opciones vendrán muy útiles.
La opción -z
comprime los datos, rediuciendo la cantidad de información enviada por la red.
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.
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
.
Con -u
sólamente se copian los archivos nuevos o que son más nuevos en la carpeta de origen
.
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
.