URL: https://www.progressiverobot.com/how-to-use-rsync-to-sync-local-and-remote-directories-es/

Introducción

*Rsync*, que significa "sincronización remota", es una herramienta de sincronización de archivos remotos y locales. Utiliza un algoritmo que minimiza la cantidad de datos copiados, moviendo solo las partes de los archivos que cambiaron.

En esta guía, explicaremos el manejo básico de esta potente utilidad.

¿Qué es Rsync?

rsync illustration for: ¿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:

				
					
cd ~

mkdir dir1

mkdir dir2

touch dir1/file{1..100}

				
			

Ahora, tenemos un directorio llamado dir1 con 100 archivos vacíos.

				
					
ls dir1

				
			
				
					
[secondary_label 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:

				
					
rsync -r dir1/ dir2

				
			

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:

				
					
rsync -a dir1/ dir2

				
			

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:

				
					
rsync -a dir1<^>/<^> dir2

				
			

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:

				
					
~/dir2/dir1/[files]

				
			

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:

				
					
rsync -anv dir1/ dir2

				
			
				
					
[secondary_label Output]

sending incremental file list

./

file1

file10

file100

file11

file12

file13

file14

file15

file16

file17

file18

. . .

				
			

Compare este resultado con el resultado que obtenemos cuando eliminamos la barra diagonal:

				
					
rsync -anv dir1 dir2

				
			
				
					
[secondary_label 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 -a ~/dir1 <^>username<^>@<^>remote_host<^>:<^>destination_directory<^>

				
			

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:

				
					
rsync -a <^>username<^>@<^>remote_host<^>:<^>/home/username/dir1<^> <^>place_to_sync_on_local_machine<^>

				
			

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:

				
					
rsync -az <^>source<^> <^>destination<^>

				
			

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:

				
					
rsync -azP <^>source<^> <^>destination<^>

				
			
				
					
[secondary_label 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)

. . .

				
			

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.

				
					
rsync -azP <^>source<^> <^>destination<^>

				
			
				
					
[secondary_label 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:

				
					
touch dir1/file{1..10}

rsync -azP <^>source<^> <^>destination<^>

				
			
				
					
[secondary_label 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 -a --delete <^>source<^> <^>destination<^>

				
			

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=:

				
					
rsync -a --exclude=<^>pattern_to_exclude<^> <^>source<^> <^>destination<^>

				
			

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=.

				
					
rsync -a --exclude=<^>pattern_to_exclude<^> --include=<^>pattern_to_include<^> <^>source<^> <^>destination<^>

				
			

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 --delete --backup --backup-dir=<^>/path/to/backups<^> <^>/path/to/source<^> <^>destination<^>

				
			

Conclusión

Rsync puede simplificar la transferencia de archivos a través de conexiones de red y robustecer la sincronización de directorios locales. La flexibilidad de rsync lo convierte en una buena opción para muchas operaciones con diferentes niveles de archivo.

Dominar rsync le permite diseñar operaciones de respaldo complejas y obtener un control detallado sobre qué se transfiere y cómo.