Cómo usar rsync para sincronizar directorios locales y remotos digital ocean
1. ¿Qué es Rsync?
Rsync es una herramienta de sincronización muy flexible y habilitada para la red. Debido a su
presencia universal en sistemas Linux y sistemas similares a Unix, y su popularidad como
herramienta para las secuencias de comandos del sistema, se incluye en la mayoría de las
distribuciones de Linux de manera predeterminada.
Sintaxis básica
La sintaxis básica de rsync es muy sencilla, y opera de forma similar a ssh, scp y cp.
Crearemos dos directorios de prueba y algunos archivos de prueba con los siguientes
comandos:
Ahora, tenemos un directorio llamado dir1 con 100 archivos vacíos.
Output
file1 file18 file27 file36 file45 file54 file63 file72 file81 file90
file10 file19 file28 file37 file46 file55 file64 file73 file82 file91
file100 file2 file29 file38 file47 file56 file65 file74 file83 file92
file11 file20 file3 file39 file48 file57 file66 file75 file84 file93
file12 file21 file30 file4 file49 file58 file67 file76 file85 file94
file13 file22 file31 file40 file5 file59 file68 file77 file86 file95
file14 file23 file32 file41 file50 file6 file69 file78 file87 file96
file15 file24 file33 file42 file51 file60 file7 file79 file88 file97
file16 file25 file34 file43 file52 file61 file70 file8 file89 file98
file17 file26 file35 file44 file53 file62 file71 file80 file9 file99
También tenemos un directorio vacío llamado dir2 .
Para sincronizar el contenido de dir1 a dir2 en el mismo sistema, escriba lo siguiente:
cd ~
mkdir dir1
mkdir dir2
touch dir1/file{1..100}
ls dir1
rsync -r dir1/ dir2
2. La opción -r significa recursiva, que es necesaria para la sincronización de directorios.
También podríamos utilizar el indicador -a en su lugar:
La opción -a es un indicador combinado. Significa “archivo” y sincroniza de manera
recursiva, además conserva los enlaces simbólicos, los archivos especiales y de dispositivo,
fechas de modificación, grupo, propietario y permisos. Se utiliza más con más frecuencia
que -r y, generalmente, es lo que querrá utilizar.
Nota importante
Es posible que haya notado que hay una barra diagonal ( / ) al final del primer argumento en
los comandos anteriores:
Eso es necesario para referirse a “el contenido de dir1 ”. La alternativa, sin la barra diagonal,
colocaría dir1 , incluyendo el directorio, dentro de dir2 . Eso crearía una jerarquía similar a
esta:
Siempre compruebe los argumentos antes de ejecutar un comando rsync. Rsync ofrece un
método para hacer esto pasando las opciones -n o --dry-run . El indicador -v (para modo
detallado) también es necesario para obtener el resultado adecuado:
Output
sending incremental file list
./
file1
file10
file100
file11
file12
file13
rsync -a dir1/ dir2
rsync -a dir1/ dir2
~/dir2/dir1/[files]
rsync -anv dir1/ dir2
3. file14
file15
file16
file17
file18
. . .
Compare este resultado con el resultado que obtenemos cuando eliminamos la barra
diagonal:
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
. . .
Puede ver que el directorio en sí se transfiere.
Cómo usar Rsync para sincronizar con un sistema remoto
La sincronización con un sistema remoto es trivial si tiene acceso SSH al equipo remoto
y rsync instalado en ambos sitios. Una vez que tenga el acceso SSH verificado entre los dos
equipos, puede sincronizar la carpeta dir1 anterior con una computadora remota utilizando
esta sintaxis (tenga en cuenta que, en este caso, queremos transferir el propio directorio, por
lo que omitimos la barra diagonal):
rsync -anv dir1 dir2
rsync -a ~/dir1 username@remote_host:destination_directory
4. Eso se conoce como una operación “push” porque empuja un directorio del sistema local a
un sistema remoto. La operación opuesta se conoce como “pull”. Se utiliza para sincronizar
un directorio remoto con el sistema local. Si el dir1 estuviera en el sistema remoto, y no en
nuestro sistema local, la sintaxis sería la siguiente:
Al igual que el cp y otras herramientas similares, la fuente siempre es el primer argumento, y
el destino siempre es el segundo.
Opciones útiles para Rsync
Rsync proporciona muchas opciones para alterar el comportamiento predeterminado de la
utilidad. Ya hablamos de algunos de los indicadores más importantes.
Si está transfiriendo archivos que aún no se comprimieron, como los archivos de texto, puede
reducir la transferencia de la red comprimiendo con la opción -z :
El indicador -P es muy útil. Combina los indicadores --progress y --partial . El primero
de ellos le proporciona una barra de progreso para las transferencias, y el segundo le permite
reanudar las transferencias interrumpidas:
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)
. . .
rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
rsync -az source destination
rsync -azP source destination
5. Si volvemos a ejecutar el comando, obtendremos un resultado más corto porque no se
produjeron cambios. Eso ilustra la capacidad de rsync de utilizar las fechas de modificación
para determinar si se realizaron cambios.
Output
sending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00
Podemos actualizar la fecha de modificación en algunos de los archivos y ver que rsync
vuelve a copiar de manera inteligente solo los archivos modificados:
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)
file2
0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=87/101)
file3
0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=76/101)
. . .
Para mantener dos directorios realmente sincronizados, es necesario eliminar los archivos del
directorio destino si se eliminan de la fuente. De forma predeterminada, rsync no elimina
nada del directorio de destino.
Podemos cambiar este comportamiento con la opción --delete . Antes de utilizar esta
opción, utilice la opción --dry-run y realice pruebas para evitar la pérdida de datos:
rsync -azP source destination
touch dir1/file{1..10}
rsync -azP source destination
rsync -a --delete source destination
6. Si desea excluir ciertos archivos o directorios ubicados en un directorio que está
sincronizando, puede hacerlo especificándolos en una lista separada por comas, siguiendo la
opción --exclude= :
Si especificamos un patrón para excluir, podemos anular esa exclusión para archivos que
coincidan con un patrón diferente utilizando la opción --include= .
Por último, la opción --backup de rsync se puede utilizar para almacenar copias de
seguridad de archivos importantes. Se utiliza en conjunto con la opción --backup-dir , que
especifica el directorio en donde las copias de seguridad de los archivos se deben almacenar.
rsync -a --exclude=pattern_to_exclude source destination
rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destinatio
rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source
destination