Comando rsync de Linux: opciones y ejemplos de uso

Si vuelves a copiar toda la carpeta cada vez para mantener dos servidores iguales, la transferencia ocupa el tamaño completo aunque solo haya cambiado un archivo. El comando rsynces la abreviatura de remote sync: compara origen y destino, envía solo los archivos que difieren y funciona igual entre carpetas locales y entre servidores conectados por SSH. Este artículo repasa el uso básico, las opciones y ejemplos de los dos métodos de conexión: SSH y el demonio rsync.
Las salidas de este artículo proceden de rsync 3.2.7 en AlmaLinux 9.8. Si no está instalado, se instala con el gestor de paquetes.
# Familia RHEL
dnf -y install rsync
# Familia Debian
apt -y install rsync✅ Uso básico
La sintaxis básica es la siguiente.
rsync -opciones origen destinoIgual que con el comando cp, el origen va primero y el destino después. Si el origen termina en barra [/], solo entra el contenido de la carpeta en el destino; sin ella, entra la carpeta entera.
~]# rsync -av www/ backup/
sending incremental file list
index.html
img/
img/logo.png
~]# rsync -av www backup/
sending incremental file list
www/
www/index.html
www/img/
www/img/logo.pngSi ejecutas el mismo comando otra vez, la lista de archivos queda vacía y los bytes enviados bajan a unos cientos. Los archivos con el mismo tamaño y la misma fecha de modificación se omiten.
~]# rsync -av www/ backup/
sending incremental file list
sent 166 bytes received 13 bytes 358.00 bytes/sec
total size is 3,015 speedup is 16.84Con -r solo, sin -a, no se conservan las fechas de modificación y la siguiente ejecución vuelve a enviar los mismos archivos. Para sincronizar carpetas, usa -a por defecto.
La opción -n muestra solo qué archivos cambiarían, sin transferir nada, y el resultado termina en [(DRY RUN)]. Las opciones que borran archivos en el destino, como --delete, se comprueban primero con -n y luego se ejecutan.
~]# rsync -avn --delete www/ backup/
sending incremental file list
deleting old.bak
index.html
sent 188 bytes received 39 bytes 454.00 bytes/sec
total size is 3,013 speedup is 13.27 (DRY RUN)✅ Opciones del comando rsync y simulador
| Opción | Descripción | |
|---|---|---|
| -a | --archiveCopia también los subdirectorios y conserva permisos, propietario, fecha de modificación y enlaces simbólicos (igual que -rlptgoD) | |
| -v | --verboseMuestra el nombre de cada archivo transferido y los totales | |
| -z | --compressComprime los datos durante la transferencia | |
| -r | --recursiveCopia también los subdirectorios (incluido en -a) | |
| -t | --timesConserva las fechas de modificación (incluido en -a). Es el criterio que decide qué archivos se omiten en la siguiente ejecución | |
| -n | --dry-runMuestra solo los archivos que cambiarían, sin transferir, y marca el final con (DRY RUN) | |
| -u | --updateOmite los archivos que son más recientes en el destino | |
| -h | --human-readableMuestra los bytes en unidades K, M y G | |
| -P | Igual que --partial --progress. Muestra el progreso por archivo y reanuda transferencias interrumpidas | |
| -i | --itemize-changesMuestra con un código qué cambió en cada archivo>f+++++++++ archivo nuevo · >f.st...... tamaño y fecha cambiados · *deleting borrado | |
| -e | --rsh=COMMANDEspecifica el shell remoto-e 'ssh -p 2222 -i /root/.ssh/key.pem' | |
| --delete | Borra del destino los archivos que ya no existen en el origen (requiere -r o -a) | |
| --exclude=PATTERN | Excluye los archivos y directorios que coinciden con el patrón--exclude '*.tmp' --exclude 'cache/' | |
| --include=PATTERN | Colocado antes de --exclude, deja solo ese patrón fuera de la exclusión | |
| --max-size=SIZE | No transfiere archivos mayores que el tamaño indicado (--min-size para los más pequeños)--max-size=3M --min-size=10k | |
| --bwlimit=RATE | Limita la velocidad de transferencia, en KiB/s | |
| --stats | Muestra estadísticas de número de archivos y transferencia |
✅ Métodos de conexión: SSH y el demonio rsync
Hay dos formas de conectarse a un servidor remoto. Un solo dos puntos [:] tras el host pasa por SSH; dos puntos dobles [::] conectan directamente con el demonio rsync en el puerto 873.
| Aspecto | Método SSH (:) | Método del demonio rsync (::) |
|---|---|---|
| Sintaxis | rsync -opciones user@host:/ruta /ruta-local | rsync -opciones host::módulo/ruta /ruta-local |
| Puerto | Puerto SSH (22 por defecto) | 873 |
| Cifrado | Cifrado por SSH | Sin cifrado |
| Autenticación | Clave SSH o contraseña | hosts allow en rsyncd.conf; cuenta y contraseña opcionales |
| Configuración en el servidor | Ninguna (funciona en cuanto hay acceso SSH) | Instalar rsync-daemon, /etc/rsyncd.conf, abrir el puerto 873 |
| Uso | Copias y despliegues entre servidores (la opción por defecto) | Réplicas en una red interna sin entregar cuentas SSH |
🔲 Método SSH
Si puedes acceder al servidor por SSH, funciona sin configurar nada en el servidor. Si el puerto es distinto o usas un archivo de clave, pon el comando ssh tal cual en la opción -e.
# local → remoto
rsync -avz /home/2server_data/ root@192.168.45.239:/home/1server_data/
# remoto → local
rsync -avz root@192.168.45.239:/home/1server_data/html_Remote /home/2server_data
# Puerto SSH y archivo de clave
rsync -avz -e 'ssh -p 2222 -i /root/.ssh/key.pem' root@192.168.45.239:/home/1server_data/ /home/2server_data
Para dejar fuera ciertos archivos o directorios, añade --exclude una vez por patrón o agrupa los patrones entre llaves y escríbelos de una vez.
rsync -avz --exclude 'html_Remote_Excertion' --exclude 'Exception_File' root@192.168.45.239:/home/1server_data/ /home/2server_data
rsync -avz --exclude={'html_Remote_excertion/*','Exception_File'} root@192.168.45.239:/home/1server_data/ /home/2server_data
🔲 Método del demonio rsync
El demonio rsync permite el acceso por módulos en el puerto 873 sin cuenta SSH. El tráfico no va cifrado, así que se usa entre servidores de la misma red interna.
En AlmaLinux 9, instala el paquete rsync-daemon y arranca el servicio. En servidores con firewalld, abre el puerto 873; en servidores en la nube, ábrelo en el cortafuegos de la consola. El método xinetd que se usaba en RHEL 8 y anteriores desapareció en 9.
dnf -y install rsync-daemon
systemctl enable --now rsyncd
firewall-cmd --permanent --add-port=873/tcp
firewall-cmd --reloadEn el archivo de configuración [/etc/rsyncd.conf] se indican el nombre del módulo, su ruta y los hosts permitidos. Con read only en yes, desde el remoto solo se puede descargar.
[myhome]
path = /home
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = 192.168.45.182
max connections = 3
timeout = 30Desde el remoto, solo dos puntos dobles tras el host muestran la lista de módulos; con el nombre del módulo se listan los archivos que contiene.
~]# rsync 192.168.45.239::
myhome
home
~]# rsync 192.168.45.239::myhome
drwxr-xr-x 4,096 2025/06/12 22:14:39 .
drwxr-xr-x 4,096 2025/06/12 22:21:10 1server_data
drwxr-xr-x 4,096 2025/06/12 22:14:39 2server_dataLa copia usa la forma [host::módulo/ruta]. --delete elimina del destino los archivos que no están en el origen, y --include deja fuera de la exclusión solo los elementos puestos antes de --exclude.
~]# rsync -avz 192.168.45.239::myhome/1server_data/ /home/2server_data/
receiving incremental file list
./
Exception_File
html_Remote/
html_Remote_Excertion/
sent 58 bytes received 332 bytes 780.00 bytes/sec
total size is 442 speedup is 1.13
~]# rsync -avz --delete 192.168.45.239::myhome/1server_data/ /home/2server_data/
~]# rsync -avz --include '*.html' --exclude 'exclude.txt' 192.168.45.239::myhome/1server_data/ /home/2server_data/

En un servidor con SELinux activado, el acceso a la ruta del módulo puede bloquearse con [Permission denied (13)]. En la prueba pasó tras desactivar SELinux con [setenforce 0].
~]# rsync -avz 192.168.45.239::myhome/1server_data/ /home/2server_data/
receiving incremental file list
rsync: change_dir "/1server_data" (in myhome) failed: Permission denied (13)
sent 8 bytes received 90 bytes 65.33 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1658) [Receiver=3.1.2]--bwlimit limita la velocidad en KiB/s y, con -P, se ve además el progreso de cada archivo. --max-size y --min-size transfieren solo los archivos dentro del rango de tamaño indicado.
rsync -avzP --bwlimit=100 192.168.45.239::myhome/1server_data/ /home/2server_data/
rsync -avz --max-size='3M' --min-size='10k' 192.168.45.239::myhome/1server_data/ /home/2server_data/
ℹ️ Aviso de afiliados
El contenido de este sitio incluye enlaces de afiliado. Cuando un visitante compra un producto o servicio a través de uno de ellos, el sitio recibe una comisión del vendedor. El importe que paga el comprador(baja durante las promociones ↓)no aumenta. Los precios, descuentos y existencias publicados corresponden al momento de redacción y pueden variar, así que confírmalos con el vendedor antes de comprar. Los productos se eligen y evalúan con criterios propios, y las comisiones no influyen en el orden ni en el contenido de las reseñas.