Tutorial: Rsync (sincronizar archivos entre carpetas y entre computadoras)
El comando rsync
(Remote Sync, o en español “sincronización remota”) de Linux sirve para transferir y sincronizar directorios y archivos entre computadoras. La sincronización puede ser entre dos carpetas locales, dos computadoras locales o incluso con servidores remotos. Cabe destacar que esta sincronización es muy rápida y muy eficiente gracias a que este programa usa un algoritmo muy veloz de ‘diferenciamiento’.
Sintaxis básica
La sintaxis del comando es bastante similar a los comandos mv
y cp
que puedes ya haber usado en el pasado.
rsync [modificadores opcionales] [origen] [destino]
Argumentos
Los parámetros de origen y destino son las carpetas o archivos de origen y de destino respectivamente.
En el caso de hacer una transferencia remota, es decir fuera de la computadora donde se ejecuta el comando tendríamos que incluir el usuario y el “host” de la computadora remota. Por ejemplo, si la computadora de destino está en un usuario “admin” y la dirección IP (host) de la computadora es 192.168.1.5 entonces el destino sería admin@192.168.1.5:/ruta/de/destino
. Noten el uso de los dos puntos :
como delimitador.
Opciones y argumentos principales:
Algunos de las opciones disponibles incluyen:
Para ver todas las opciones que tenemos disponibles podemos usar el comando man
o con el modificador --help
Usando Rsync
Instalación
La buena noticia es que ya viene instalado en la gran mayoría de distribuciones de Linux y otros sistemas basados en Unix. Para verificar si tenemos rsync
instalado podemos usar el comando rsync --version
en la línea de comandos. Si lo tenemos instalado debería imprimirnos algo como lo siguiente:
rsync version 2.6.9 protocol version 29
En caso no lo tengas instalado, puedes instalarlo de la siguiente manera según tu S.O:
Debian/Ubuntu
Fedora/CentOS
MacOS
Si no tienes brew
tendrás que instalarlo con el siguiente script y luego correr el comando anterior:
Ejemplo práctico
Para este tutorial vamos a primero crear una estructura de carpetas con los siguientes comandos:
Duplicar folder
Ahora vamos a sincronizar los directorios original
y duplicado
para que contengan los mismos archivos con el comando:
El asterisco (*) indica que copie todos los archivos dentro de original hacia la carpeta duplicado. Ahora si usamos el comando ls -l duplicado/
vamos a ver que ambas carpetas tienen la misma información, es decir los archivos “file1, file2 y file3”
Duplicar archivos solo con cierta extensión
Ahora haremos algo un poco más complicado, crearemos una estructura de carpetas algo más elaborada y copiaremos solo los archivos con la extensión .jpg
Primero vamos borrar las carpetas que hemos creado anteriormente con el comando rm
Luego ejecutamos los siguientes comandos:
En #1 crea creamos 3 archivos con tres extensiones distintas dentro de cada carpeta y en #2 nos imprime la estructura de carpetas que acabamos de crear.
Deberíamos ver algo como lo siguiente:
Aquí vemos que hemos creado dentro de cada carpeta los 3 archivos con extensiones distintas.
Ahora nos vamos a apoyar de las opciones -v
de verboso, -r
de recursivo, -h
de “human readable”,-z
para comprimir los datos mientras se transfieren,--exclude
para excluir los archivos que no queremos sincronizar, y, finalmente, --include
para incluir los archivos .jpg. Entonces nuestro comando para copiar solo los archivos que tengan la extensión .jpg ahora es:
rsync -v -r -h -z --include="*/" --include=""*.jpg" --exclude="*"" original/ duplicados/
N.B.: Si deseas puedes juntar las opciones en un solo bloque como -hvrz
como para no escribir tanto.
Para verificar que todo se ha transferido correctamente podemos usar el comando tree duplicados
y nos debería aparecer lo siguiente:
Opción --dry-run
Si queremos hacer una previsualización de lo que fuéramos a copiar podemos usar la opción -n
(o en versión larga --dry-run
) como para probar que nuestro comando va a hacer lo que queremos. Esto es de mucha ayuda en especial con directorios remotos, y queremos estar seguros que vamos a transferir los archivos correctamente. Por ejemplo, usando el último comando:
rsync -v -r -h -z --dry-run --include="*/" --include=""*.jpg" --exclude="*"" original/ duplicados/
Nos listará los archivos que vamos a copiar. Si es correcto lo que nos imprime, procedemos a correr el mismo comando sin la opción --dry-run
.
Sincronizar con un servidor remoto
Digamos que queremos sincronizar los mismos archivos, pero ahora con un servidor o una computadora en nuestra LAN. Para hacer esto necesitamos tres cosas, el usuario
con el cual vamos a acceder, la IP o dominio
y los permisos
en la computadora de destino (o servidor).
Por ejemplo, yo quiero subir este mismo archivo que estoy escribiendo llamado post-rsync.md
al servidor con dominio wemake.pe
con el usuario blog
entonces mi comando sería:
Así de sencillo. Estamos usando la opción -P
para que nos dé un progreso de lo que está sucediendo, nos sirve por ejemplo si son archivos grandes los que vamos a actualizar.
N.B.: Si no tienes aún un dominio o quieres transmitirlo a una dirección IP local podrías usar algo como:
Sincronizar sólo los archivos modificados con un servidor remoto
Muchas veces, hago correcciones en algunos posts, y no tomo nota de cuales he sincronizado y cuales no, así que dejo que rsync
se encargue de hacerlo. Para empezar, todos mis posts los archivo en una carpeta llamada /blog
en mi computadora. Entonces lo que hago es simplemente decirle al rsync
con la opción -u
que solamente sincronice los archivos locales que tengan fecha de modificación más reciente, es decir solo los que he modificado. Por ejemplo:
Recuperar archivos del servidor en una carpeta local
Si queremos, por ejemplo, recuperar todos los archivos que tenemos en una carpeta del servidor, rsync
también nos puede ayudar. Digamos que quiero obtener los posts que tengo almacenados en /ruta/del/blog/posts
en mi servidor remoto de wemake.pe
usaría el siguiente comando:
Lo único que he hecho es decir que la carpeta de origen es mi carpeta en el servidor remoto y la de destino es mi carpeta local en ~/posts/
Hacer un backup (respaldo) de los archivos que se van a reemplazar del servidor
También podemos usar rsync
para no perder los archivos que sobrescribimos durante las transferencias. Las opciones para hacerlo son --backup
y --backup-dir
.
Por ejemplo, el comando anterior con las opciones de backup seria el siguiente comando:
Esto copiaría los files que se sobrescriban o modifiquen hacia la carpeta especificada en --backup-dir
Algunas otras opciones que pueden servirte
--delete
Esta opción te permite eliminar todos los archivos que estén la carpeta de destino y que no están en la carpeta original, es decir para que sean exactamente iguales.
--max-size=10k
esta opción tiene como parámetro el tamaño máximo del archivo a transmitir, si el tamaño de un archivo es superior a este valor, no se sincronizará.
Conclusión
Si bien es cierto un solo post no alcanza para explicar todas las opciones que te brinda rsync
espero que este tutorial haya sido de ayuda para empezar a utilizarlo. Como ven, es muy útil para transferir y sincronizar cualquier tipo de carpetas y archivos. Es una utilidad muy rápida y las opciones son muy poderosas. Puedes ver la documentación oficial para conocer más de esta herramienta.
Fuentes y lecturas recomendadas:
https://www.hostinger.es/tutoriales/rsync-linux/
https://blog.infranetworking.com/rsync-algunos-ejemplos-practicos-de-su-uso/
https://www.comoinstalarlinux.com/rsync-local-remoto-archivos-backup-files-commands/