Sincronizacion con rsync(1)
rsync
es una utilidad de sincronizacion 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 solamente las partes que
cambiaron de un archivo. Es por ello que tambien se lo utiliza como un
cp
mejorado.
Uso basico
Como alternativa a cp
Comencemos por ver como 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 sera decirle a rsync que copie
recursivamente (es decir las subcarpetas y sus contenidos tambien), de
origen
a destino
.
rsync -r origen/ destino
Notar la opcion
-r
que es la que le indica arsync
que la copia es recursiva.
Otra alternativa es indicarle con la opcion -a
que copie
recursivamente preservando los metadatos y archivos especiales (por
ejemplo enlaces simbolicos)
rsync -a origen/ destino
Importante: Notar en los dos ejemplos anteriores que
origen
esta finalizado con una barra/
. De esta manera se le senaliza arsync
que copie el contenido deorigen
y no lo incluya. De otra forma lo que haria seria crear endestino
una nueva carpeta llamadaorigen
y volcar alli todo lo copiado.
Otras opciones utiles
Chequear lo que va a suceder
La opcion -n
o bien --dry-run
permite
chequear que es lo que hara rsync
sin que realmente se
lleve ninguna opcion a cabo. Esto generalmente se combina con la opcion
siguiente para mas detalles sobre el procedimiento a realizar.
Salida verborragica
La opcion -v
muestra informacion mas 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 area donde rsync
se luce. Realizaremos
una sincronizacion 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,
mas precisamente, el path absoluto de destino
seria /home/fulana/destino
(suponiendo que nuestro usuario
es fulana
).
Entonces
rsync -e ssh -a origen/ fulana@texto-plano.xyz:/home/fulana/destino
Aqui aparecio la opcion -e ssh
para indicarle a
rsync
que el medio de conexion con Texto-Plano sera
mediante ssh
.
De manera analoga, si quisieramos sincronizar de Texto-Plano hacia nuestra computadora, el comando seria:
rsync -e ssh -a fulana@texto-plano.xyz:/home/fulana/origen/ destino
Mas opciones utiles
Ahora que estamos realizando copias por la red, estas opciones vendran muy utiles.
Compresion de los datos
La opcion -z
comprime los datos, rediuciendo la cantidad
de informacion enviada por la red.
Indicacion de progreso
Con la opcion -P
rsync
nos indicara el
progreso de la sincronizacion. Ideal para cuando hay mucha info a copiar
y queremos saber como va avanzando el asunto.
Datos en numeros legibles
Con la opcion -h
le decimos a rsync
que los
numeros los muestre en una escala mas facil de entender. Usualmente
combinada con la opcion -P
.
Copiar solamente archivos nuevos o modificados
Con -u
solamente se copian los archivos nuevos o que son
mas 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
copiara todo el contenido de la carpeta origen
en
Texto-Plano (-a
), de manera comprimida (-z
),
copiando archivos nuevos o modificados solamente (-u
), de
manera facil de leer (-h
), mostrando el progreso
(-P
) usando ssh
como transporte.
Recuerden que siempre tienen mas informacion con el comando
man rsync
.