Rsync (Sincronización Remota) es el comando más comúnmente utilizado para copiar y sincronizar archivos y directorios de forma remota, así como localmente en sistemas Linux/Unix.
Con la ayuda del comando rsync, puedes copiar y sincronizar tus datos de forma remota y local entre directorios, discos y redes, realizar copias de seguridad de datos y reflejar entre dos máquinas Linux.
Este artículo explica 16 usos básicos y avanzados del comando rsync para transferir tus archivos de forma remota y local en máquinas basadas en Linux. No necesitas ser un usuario root para ejecutar el comando rsync.
Tabla de Contenidos
Ventajas del comando Rsync
Ofrece varias ventajas, incluyendo:
- Transferencia de archivos eficiente – rsync utiliza un algoritmo de transferencia delta, lo que significa que solo transfiere las diferencias entre los archivos de origen y destino, lo que reduce significativamente la cantidad de datos transferidos, haciéndolo eficiente para sincronizar archivos o directorios grandes.
- Sincronización remota de archivos – rsync soporta transferencias de archivos locales y remotas a través de SSH, lo que permite la sincronización entre sistemas locales y remotos o el espejeo de directorios en múltiples máquinas.
- Backup incremental – rsync es adecuado para backups incrementales, ya que crea y actualiza backups eficientemente transfiriendo solo archivos nuevos o modificados.
- Preserva los permisos de archivo – rsync puede preservar varios atributos de archivo, como permisos, propiedad, marcas de tiempo y enlaces simbólicos, lo que asegura que los archivos copiados conserven sus características originales en el destino.
- Control de ancho de banda – rsync te permite limitar el uso del ancho de banda durante las transferencias de archivos, ya que utiliza métodos de compresión y descompresión al enviar y recibir datos en ambos extremos.
- Más rápido – rsync puede ser más rápido que scp (Copia Segura) para transferir archivos, especialmente al sincronizar directorios grandes o al tratar con archivos que ya han sido transferidos parcialmente o existen en el destino.
Sintaxis del comando Rsync
El comando rsync sigue la siguiente sintaxis:
# rsync [OPTIONS] SOURCE DESTINATION
Aquí tienes una explicación de los diferentes componentes y opciones utilizados con los comandos de rsync:
-v
– Salida detallada, mostrando información detallada sobre la transferencia.-r
– copia datos recursivamente (pero no preserva marcas de tiempo ni permisos durante la transferencia de datos).-a
– modo de archivo, que permite copiar archivos de forma recursiva y también preserva enlaces simbólicos, permisos de archivo, propiedades de usuario y grupo, y marcas de tiempo.-z
– Comprimir archivos durante la transferencia para reducir el uso de red.-h
– legible por humanos, muestra números en un formato legible por humanos.-P
– Mostrar progreso durante la transferencia.SOURCE
– Especifica el archivo o directorio de origen que se transferirá, que puede ser una ubicación local o remota.DESTINATION
– Especifica la ruta de destino donde se copiarán los archivos o directorios. Similar al origen, puede ser una ruta local o una ubicación remota.
Instalar Rsync en el sistema Linux
Podemos instalar el paquete rsync con la ayuda del siguiente gestor de paquetes según la distribución de Linux que tengas.
$ sudo apt install rsync [On Debian, Ubuntu and Mint] $ sudo yum install rsync [On RHEL/CentOS/Fedora and Rocky/AlmaLinux] $ sudo emerge -a sys-apps/rsync [On Gentoo Linux] $ sudo apk add rsync [On Alpine Linux] $ sudo pacman -S rsync [On Arch Linux] $ sudo zypper install rsync [On OpenSUSE]
1. Copiar/Sincronizar Archivo Localmente
Para copiar o sincronizar un archivo localmente, puedes usar el siguiente comando que sincronizará un solo archivo en una máquina local desde una ubicación a otra.
Aquí en este ejemplo, un archivo llamado backup.tar necesita ser copiado o sincronizado en la carpeta /tmp/backups/.
[root@tecmint]# rsync -zvh backup.tar.gz /tmp/backups/ created directory /tmp/backups backup.tar.gz sent 224.54K bytes received 70 bytes 449.21K bytes/sec total size is 224.40K speedup is 1.00
En el ejemplo anterior, puedes ver que si el destino no existe, rsync creará un directorio automáticamente para el destino.

2. Copiar/Sincronizar Directorio Localmente
El siguiente comando transferirá o sincronizará todos los archivos de un directorio a otro directorio en la misma máquina.
Aquí en este ejemplo, /root/rpmpkgs contiene algunos archivos de paquetes rpm y desea que ese directorio se copie dentro de la carpeta /tmp/backups/.
[root@tecmint]# rsync -avzh /root/rpmpkgs /tmp/backups/ sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm sent 3.47M bytes received 96 bytes 2.32M bytes/sec total size is 3.74M speedup is 1.08

3. Copiar un Directorio de Local a Servidor Remoto
Para copiar un directorio de un servidor local a un servidor remoto, puede usar el siguiente comando, que sincronizará un directorio de una máquina local a una remota.
Por ejemplo, si hay una carpeta en su computadora local ” rpmpkgs ” que contiene algunos paquetes RPM y si desea enviar el contenido de ese directorio local a un servidor remoto, puede usar el siguiente comando.
# rsync -avzh /root/rpmpkgs [email protected]:/root/ The authenticity of host '192.168.0.141 (192.168.0.141)' can't be established. ED25519 key fingerprint is SHA256:bH2tiWQn4S5o6qmZhmtXcBROV5TU5H4t2C42QDEMx1c. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.0.141' (ED25519) to the list of known hosts. [email protected]'s password: sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm sent 3.74M bytes received 96 bytes 439.88K bytes/sec total size is 3.74M speedup is 1.00

4. Copiar un Directorio de Servidor Remoto a Local
Este comando le ayudará a sincronizar un directorio remoto a un directorio local. Aquí en este ejemplo, un directorio /root/rpmpkgs que está en un servidor remoto está siendo copiado en su computadora local en /tmp/myrpms.
# rsync -avzh [email protected]:/root/rpmpkgs /tmp/myrpms [email protected]'s password: receiving incremental file list created directory /tmp/myrpms rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm sent 104 bytes received 3.49M bytes 997.68K bytes/sec total size is 3.74M speedup is 1.07

5. Rsync Sobre SSH
Con rsync, podemos usar SSH (Secure Shell) para la transferencia de datos, utilizando el protocolo SSH mientras transferimos nuestros datos, puede estar seguro de que sus datos se están transfiriendo en una conexión segura con cifrado para que nadie pueda leer sus datos mientras se transfieren por el cable en Internet.
También, cuando usamos rsync, necesitamos proporcionar el usuario/contraseña de root para completar esa tarea en particular, por lo que usar la opción SSH enviará sus inicios de sesión de manera cifrada para que su contraseña esté segura.
Para usar rsync sobre SSH, puede usar la opción -e
para especificar el comando de shell remoto, que normalmente es ssh como se muestra.
# rsync [OPTIONS] -e ssh /path/to/source user@remote:/path/to/destination
6. Copiar un archivo de un servidor remoto a un servidor local con SSH
Para sincronizar un archivo desde un servidor remoto a un servidor local, puede especificar un protocolo con rsync utilizando la opción “-e” con el nombre del protocolo que desea utilizar.
Aquí, en este ejemplo, utilizaremos “ssh” con la opción “-e” y realizaremos la transferencia de datos.
# rsync -avzhe ssh [email protected]:/root/anaconda-ks.cfg /tmp [email protected]'s password: receiving incremental file list anaconda-ks.cfg sent 43 bytes received 1.10K bytes 325.43 bytes/sec total size is 1.90K speedup is 1.67

7. Copiar un archivo de un servidor local a un servidor remoto con SSH
Para sincronizar un archivo desde un servidor local a un servidor remoto utilizando SSH, puedes aprovechar el siguiente comando como se muestra.
# rsync -avzhe ssh backup.tar.gz [email protected]:/backups/ [email protected]'s password: sending incremental file list created directory /backups backup.tar.gz sent 224.59K bytes received 66 bytes 64.19K bytes/sec total size is 224.40K speedup is 1.00

8. Mostrar progreso mientras se transfieren datos con Rsync
Para mostrar el progreso mientras se transfieren los datos de una máquina a otra, podemos usar la opción ‘--progress'
, que muestra los archivos y el tiempo restante para completar la transferencia.
# rsync -avzhe ssh --progress /root/rpmpkgs [email protected]:/root/rpmpkgs [email protected]'s password: sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm 1.47M 100% 31.80MB/s 0:00:00 (xfr#1, to-chk=3/5) rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm 138.01K 100% 2.69MB/s 0:00:00 (xfr#2, to-chk=2/5) rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm 2.01M 100% 18.45MB/s 0:00:00 (xfr#3, to-chk=1/5) rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm 120.48K 100% 1.04MB/s 0:00:00 (xfr#4, to-chk=0/5) sent 3.74M bytes received 96 bytes 1.50M bytes/sec total size is 3.74M speedup is 1.00

9. Incluir archivos con una extensión particular con Rsync
Para incluir archivos específicos o patrones durante una operación de rsync, puedes usar la opción --include
con una extensión que coincida con todos los archivos.
# rsync -avz --include='*.txt' /path/to/source/ user@remote:/path/to/destination/
En el ejemplo proporcionado, rsync incluirá solo archivos con la extensión .txt
desde el directorio /ruta/a/origen/ durante la transferencia.
10. Excluir archivos con una extensión particular con Rsync
De manera similar, para excluir una extensión específica durante una operación de rsync, puedes usar la opción --exclude
con un patrón de comodín.
# rsync -avz --exclude='*.ext' /path/to/source/ user@remote:/path/to/destination/
En el ejemplo proporcionado, rsync excluirá los archivos con la extensión especificada (*.ext) durante la transferencia, mientras incluye todos los demás archivos y directorios.
11. Incluir y Excluir Archivos con Rsync
Para incluir y excluir archivos o patrones específicos durante una operación de rsync, puedes utilizar tanto las opciones –include como –exclude con patrones de comodines adecuados.
Estas dos opciones nos permiten incluir y excluir archivos al especificar parámetros; estas opciones nos ayudan a especificar aquellos archivos o directorios que deseas incluir en tu sincronización y excluir archivos y carpetas que no deseas transferir.
Aquí, en este ejemplo, el comando rsync incluirá solo aquellos archivos y directorios que comiencen con ‘R’ y excluirá todos los demás archivos y directorios.
# rsync -avze ssh --include 'R*' --exclude '*' [email protected]:/var/lib/rpm/ /root/rpm

12. Uso de la opción –delete con Rsync
Si un archivo o directorio no existe en la fuente, pero ya existe en el destino, es posible que desees eliminar ese archivo/directorio existente en el destino mientras sincronizas.
Podemos usar la opción ‘–delete’ para eliminar archivos que no están en el directorio de origen.
La fuente y el destino están sincronizados. Ahora crea un nuevo archivo test.txt en el destino.
[root@tecmint:~]# cd /root/rpm/ [root@tecmint:~/rpm]# touch test.txt [root@tecmint:~/rpm]# rsync -avz --delete [email protected]:/var/lib/rpm/ /root/rpm/ [email protected]'s password: receiving incremental file list deleting test.txt ./ .dbenv.lock .rpm.lock Basenames Conflictname Dirnames Enhancename Filetriggername Group Installtid Name Obsoletename Packages Providename Sha1header Sigmd5 Suggestname Supplementname Transfiletriggername Triggername __db.001 __db.002 __db.003 sent 445 bytes received 18,543,954 bytes 2,472,586.53 bytes/sec total size is 71,151,616 speedup is 3.84
El destino tiene el nuevo archivo llamado test.txt cuando se sincroniza con la fuente con la opción ‘--delete
‘, elimina el archivo test.txt.

13. Establecer límite de transferencia de archivos con Rsync
Puede especificar el tamaño máximo del archivo a transferir o sincronizar. Puede hacerlo con la opción “--max-size
”. Aquí en este ejemplo, el tamaño máximo del archivo es 200k, por lo que este comando transferirá solo aquellos archivos que sean iguales o más pequeños que 200k.
# rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ [email protected]:/root/tmprpm [email protected]'s password: sending incremental file list created directory /root/tmprpm ./ .dbenv.lock .rpm.lock Conflictname Enhancename Filetriggername Group Installtid Name Obsoletename Recommendname Requirename Sha1header Sigmd5 Suggestname Supplementname Transfiletriggername Triggername __db.002 sent 129.52K bytes received 396 bytes 28.87K bytes/sec total size is 71.15M speedup is 547.66

14. Eliminar automáticamente los archivos de origen después de la transferencia
Ahora, suponga que tiene el servidor web principal y un servidor de copia de seguridad de datos, creó una copia de seguridad diaria y la sincronizó con su servidor de copia de seguridad, pero ahora no desea mantener esa copia local de la copia de seguridad en su servidor web.
Entonces, ¿esperará a que la transferencia se complete y luego eliminará ese archivo de copia de seguridad local manualmente? Por supuesto NO. Esta eliminación automática se puede hacer usando la opción ‘--remove-source-files
‘.
# rsync --remove-source-files -zvh backup.tar.gz [email protected]:/tmp/backups/ [email protected]'s password: backup.tar.gz sent 795 bytes received 2.33K bytes 894.29 bytes/sec total size is 267.30K speedup is 85.40 [root@tecmint:~]# ls -l backup.tar.gz ls: cannot access 'backup.tar.gz': No such file or directory

15. Realizar una simulación de ejecución con Rsync
Si eres un principiante usando rsync y no sabes exactamente lo que va a hacer tu comando. Rsync realmente podría estropear las cosas en tu carpeta de destino y luego deshacerlo puede ser un trabajo tedioso.
El uso de esta opción no realizará ningún cambio en los archivos y mostrará la salida del comando. Si la salida muestra exactamente lo que deseas hacer, entonces puedes eliminar la opción ‘–dry-run’ de tu comando y ejecutarlo en la terminal.
# rsync --dry-run --remove-source-files -zvh backup.tar.gz [email protected]:/tmp/backups/ [email protected]'s password: backup.tar.gz sent 50 bytes received 19 bytes 19.71 bytes/sec total size is 267.30K speedup is 3,873.97 (DRY RUN)

16. Establecer límite de ancho de banda y transferir archivos con Rsync
Puedes establecer el límite de ancho de banda mientras transfieres datos de una máquina a otra con la ayuda de la opción ‘–bwlimit’. Esta opción nos ayuda a limitar el ancho de banda de E/S.
# rsync --bwlimit=100 -avzhe ssh /var/lib/rpm/ [email protected]:/root/tmprpm/ [email protected]'s password: sending incremental file list sent 324 bytes received 12 bytes 61.09 bytes/sec total size is 38.08M speedup is 113347.05
Además, por defecto rsync sincroniza bloques y bytes cambiados únicamente, si deseas sincronizar todo el archivo explícitamente, entonces usa la opción ‘-W’ con él.
# rsync -zvhW backup.tar /tmp/backups/backup.tar backup.tar sent 14.71M bytes received 31 bytes 3.27M bytes/sec total size is 16.18M speedup is 1.10
Conclusión
Eso concluye nuestra visión general de rsync y sus capacidades. Para explorar más a fondo sus extensas opciones y funcionalidades, te animo a que consultes las completas páginas de manual (man pages) disponibles.
Source:
https://www.tecmint.com/rsync-local-remote-file-synchronization-commands/