rsync es una he­rra­mie­n­ta versátil que si­m­pli­fi­ca la tra­n­s­fe­re­n­cia de archivos a través de co­ne­xio­nes de red y acelera la si­n­cro­ni­za­ción de di­re­c­to­rios locales. Su gran fle­xi­bi­li­dad convierte a esta he­rra­mie­n­ta de si­n­cro­ni­za­ción en una opción excelente para una gran variedad de ope­ra­cio­nes con archivos.

¿Qué es rsync?

rsync, abre­via­tu­ra de remote sy­n­ch­ro­ni­sa­tion (si­n­cro­ni­za­ción remota), es una he­rra­mie­n­ta de si­n­cro­ni­za­ción flexible y co­m­pa­ti­ble con redes en Linux. Este programa de código abierto puede uti­li­zar­se para si­n­cro­ni­zar archivos y di­re­c­to­rios entre sistemas locales o a través de redes. La he­rra­mie­n­ta utiliza una técnica de tra­n­s­fe­re­n­cia di­fe­re­n­cial de datos en la que solo se tra­n­s­fie­ren las secciones de datos que realmente han cambiado. Esto minimiza el in­te­r­ca­m­bio de datos y acelera co­n­si­de­ra­ble­me­n­te el proceso de si­n­cro­ni­za­ción. Gracias a una gran variedad de opciones, rsync permite controlar con precisión el co­m­po­r­ta­mie­n­to de la si­n­cro­ni­za­ción. La sintaxis flexible permite tanto copias locales sencillas como si­n­cro­ni­za­cio­nes de red complejas.

La sintaxis de rsync

La sintaxis de comandos de rsync tiene una es­tru­c­tu­ra sencilla y es similar a la de SSH, SCP y CP. La es­tru­c­tu­ra básica es la siguiente:

rsync [OPTION] source destination
bash

La ruta de origen desde la que se van a si­n­cro­ni­zar los datos se introduce en source, mientras que la ruta de destino se introduce como destination. Para ello, rsync ofrece una variedad de opciones con las que se puede adaptar el proceso de si­n­cro­ni­za­ción a las ne­ce­si­da­des re­s­pe­c­ti­vas. Las opciones más uti­li­za­das son:

  • -a (Archive): conserva re­cu­r­si­va­me­n­te los permisos de los archivos, las marcas de tiempo, los grupos, los pro­pie­ta­rios y las pro­pie­da­des es­pe­cia­les de los archivos.
  • -v (Verbose): muestra in­fo­r­ma­ción detallada sobre el proceso de si­n­cro­ni­za­ción.
  • -r (Recursive): si­n­cro­ni­za los di­re­c­to­rios y su contenido de forma recursiva.
  • -u (Update): solo tra­n­s­fie­re aquellos archivos más nuevos que los que se en­cue­n­tran en el di­re­c­to­rio de destino.
  • -z (Compress): reduce el tráfico de datos a través de la red.
  • -n –itemize-changes: muestra una lista de cambios a realizar.
  • --delete: elimina ficheros del di­re­c­to­rio destino que ya no existen en el origen.
  • --exclude: excluye de­te­r­mi­na­dos ficheros o di­re­c­to­rios de la si­n­cro­ni­za­ción.
  • --dry-run: simula el proceso de si­n­cro­ni­za­ción sin tra­n­s­fe­rir los ficheros.
  • --progress: muestra el progreso de la tra­n­s­fe­re­n­cia de ficheros.
  • --partial: los ficheros que se han tra­n­s­fe­ri­do pa­r­cia­l­me­n­te pe­r­ma­ne­cen en el di­re­c­to­rio de destino si se in­te­rru­m­pe la tra­n­s­fe­re­n­cia. Cuando se reanuda la tra­n­s­fe­re­n­cia, el fichero se reanuda desde su último estado.

Ejemplo de sintaxis de rsync

La sintaxis de rsync puede co­m­pre­n­de­r­se fá­ci­l­me­n­te con un ejemplo. El siguiente comando crea el di­re­c­to­rio dir1 con cien archivos de prueba vacíos y un segundo di­re­c­to­rio vacío dir2:

$ cd ~
$ mkdir dir1
$ mkdir dir2
$ touch dir1/file{1..100}
bash

El contenido de dir1 puede si­n­cro­ni­zar­se en el mismo sistema con dir2 uti­li­za­n­do la opción -r:

$ rsync -r dir1/ dir2
bash

Como al­te­r­na­ti­va, se puede utilizar la opción -a, que si­n­cro­ni­za re­cu­r­si­va­me­n­te y contiene enlaces si­m­bó­li­cos, archivos de di­s­po­si­ti­vos es­pe­cia­les, tiempos de mo­di­fi­ca­ción, grupos, pro­pie­ta­rios y au­to­ri­za­cio­nes:

$ rsync -a dir1/ dir2
bash

Nota. La barra (/) al final del di­re­c­to­rio de origen en un comando rsync es im­po­r­ta­n­te porque indica que se deben si­n­cro­ni­zar los co­n­te­ni­dos del di­re­c­to­rio, no el di­re­c­to­rio en sí.

$ rsync -a dir1/ dir2
Output
sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .
bash

Sin la barra final en el di­re­c­to­rio de origen, el contenido del di­re­c­to­rio de origen se copia en el di­re­c­to­rio de destino:

$ rsync -a dir1/ dir2
Output
sending incremental file list
dir1/
dir1/file1
dir1/file10
dir1/file100
dir1/file11
dir1/file12
dir1/file13
dir1/file14
dir1/file15
dir1/file16
dir1/file17
dir1/file18
. . .
bash

En la práctica, por tanto, tiene sentido utilizar la barra al final del di­re­c­to­rio de origen para ga­ra­n­ti­zar que el proceso de si­n­cro­ni­za­ción se ejecuta como se espera y que el contenido del di­re­c­to­rio de origen termina co­rre­c­ta­me­n­te en el di­re­c­to­rio de destino.

rsync: si­n­cro­ni­za­ción con un sistema remoto

Si­n­cro­ni­zar un sistema remoto con rsync no suele ser difícil, siempre que se tenga acceso SSH al ordenador remoto y se conozca la in­fo­r­ma­ción de au­te­n­ti­ca­ción necesaria. rsync suele utilizar SSH (Secure Shell) para la co­mu­ni­ca­ción segura con sistemas remotos. La he­rra­mie­n­ta también debe estar instalada en ambos lados.

Si se verifica el acceso SSH entre los dos or­de­na­do­res, se puede si­n­cro­ni­zar la carpeta dir1 en un ordenador remoto. En este caso, se tra­n­s­fe­ri­rá el di­re­c­to­rio real, por lo que se omite la barra final en el siguiente comando:

$ rsync -a ~/dir1 username@remote_host:destination_directory
bash

Cuando se traslada un di­re­c­to­rio de un sistema local a un sistema remoto, se habla de una operación “push”. En cambio, cuando se si­n­cro­ni­za un di­re­c­to­rio remoto con un sistema local, se habla de una operación “pull”. La sintaxis es la siguiente:

$ rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
bash
Se­r­vi­do­res virtuales (VPS)
VPS rentables en se­r­vi­do­res Dell En­te­r­pri­se
  • 1 Gb/s de ancho de banda y tráfico ilimitado
  • 99,99 % de tiempo de actividad y ce­r­ti­fi­ca­ción ISO
  • Soporte 24/7 ga­la­r­do­na­do y asesor personal

Uso de otras opciones en rsync

El co­m­po­r­ta­mie­n­to estándar de rsync puede adaptarse aún más uti­li­za­n­do las opciones pre­se­n­ta­das an­te­rio­r­me­n­te.

Tra­n­s­fe­re­n­cia de archivos no co­m­pri­mi­dos con rsync

La carga de red al tra­n­s­fe­rir archivos sin comprimir puede reducirse de la siguiente manera uti­li­za­n­do la opción -z:

$ rsync -az source destination
bash

Vi­sua­li­zar el progreso y reanudar las tra­n­s­mi­sio­nes in­te­rru­m­pi­das

Con -P puedes combinar las opciones --progress y --partial. Esto te da una visión general del progreso de las tra­n­s­fe­re­n­cias y te permite reanudar las tra­n­s­fe­re­n­cias in­te­rru­m­pi­das al mismo tiempo:

$ rsync -azP source destination
Output
sending incremental file list
./
file1
    0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=99/101)
file10
    0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=98/101)
file100
    0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=97/101)
file11
    0 100%    0.00kB/s    0:00:00 (xfer#4, to-check=96/101)
. . .
bash

Ejecuta el comando de nuevo para obtener un resultado más corto. Esto permite a rsync de­te­r­mi­nar si se han realizado cambios basándose en los tiempos de cambio.

$ rsync -azP source destination
Output
sending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00
bash

Mantener los di­re­c­to­rios si­n­cro­ni­za­dos con rsync

Para asegurar que dos di­re­c­to­rios se mantienen realmente si­n­cro­ni­za­dos, es necesario borrar ficheros en el di­re­c­to­rio destino que han sido eli­mi­na­dos del origen. Por defecto, sin embargo, rsync no elimina ningún fichero del di­re­c­to­rio destino. Este co­m­po­r­ta­mie­n­to puede mo­di­fi­car­se con la opción --delete. Sin embargo, es aco­n­se­ja­ble utilizar esta opción con pre­cau­ción, ya que elimina archivos en el di­re­c­to­rio de destino que ya no existen en el origen.

Antes de utilizar esta opción, debes utilizar la opción --dry-run. Esto te permite realizar una si­mu­la­ción del proceso de si­n­cro­ni­za­ción sin borrar los archivos reales. Así, te aseguras de que solo se realizan los cambios deseados sin perder ac­ci­de­n­ta­l­me­n­te datos im­po­r­ta­n­tes:

$ rsync -a --delete source destination
bash

Excluir archivos y di­re­c­to­rios de la si­n­cro­ni­za­ción con rsync

En rsync puedes utilizar la opción --exlude para excluir de­te­r­mi­na­dos ficheros y di­re­c­to­rios de la si­n­cro­ni­za­ción. Esto es útil si, por ejemplo, archivos te­m­po­ra­les, archivos de registro u otros co­n­te­ni­dos no deben ser si­n­cro­ni­za­dos.

$ rsync -a --exclude=pattern_to_exclude source destination
bash

Si has es­pe­ci­fi­ca­do un patrón para excluir archivos, puedes so­bre­s­cri­bir esta exclusión para los archivos que coincidan con un patrón diferente uti­li­za­n­do la opción --include=.

$ rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
bash

Guardar copias de seguridad con rsync

La opción --backup permite guardar copias de seguridad de archivos im­po­r­ta­n­tes. Se utiliza junto con la opción --backup-dir. Esta opción es­pe­ci­fi­ca el di­re­c­to­rio en el que se guardarán los archivos de copia de seguridad:

$ rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination
bash

En­co­n­tra­rás una de­s­cri­p­ción detallada de los distintos es­ce­na­rios de copia de seguridad en nuestro artículo “Crear backups del servidor con rsync”.

Ir al menú principal