Sincronizar con rsync en Linux: guía completa y trucos prácticos

Última actualización: 16/10/2025
Autor: Isaac
  • Rsync sincroniza por diferencias, ahorrando tiempo y ancho de banda con su algoritmo delta-transfer.
  • Trailing slash importa: ORIGEN/ copia contenidos; sin barra crea el directorio dentro del destino.
  • Seguridad y fiabilidad: usa SSH, claves, -P para reanudar y --dry-run antes de --delete.
  • Flexibilidad total: exclusiones, límites, compresión, backups y tareas programadas con cron.

Sincronizar con rsync en Linux

Si trabajas con Linux y manejas archivos a diario, rsync es la navaja suiza para sincronizar y transferir datos entre directorios locales y servidores remotos de forma rápida, segura y eficiente. No solo copia, también compara y envía únicamente lo que ha cambiado, ahorrando tiempo y ancho de banda.

En esta guía práctica aprenderás a dominar rsync paso a paso: desde su sintaxis básica y las opciones clave, hasta trucos avanzados como exclusiones, borrados seguros, reanudación de transferencias, copias de seguridad y automatización con cron. Además, verás cómo usarlo con SSH, claves sin contraseña y límites de tamaño o velocidad.

¿Qué es rsync y por qué es tan rápido?

Rsync son las siglas de “remote synchronization”. Es una herramienta de código abierto para sincronizar directorios y archivos entre ubicaciones locales o remotas (vía red). Su gran baza es el algoritmo “delta-transfer”: analiza metadatos y contenido por bloques y transfiere solo las diferencias, reduciendo drásticamente los datos enviados.

Está disponible en prácticamente todas las distribuciones GNU/Linux y sistemas tipo Unix. Su comportamiento recuerda a cp y scp, pero con muchas más opciones finas: preserva permisos, reanuda cortes, comprime al vuelo, excluye patrones, muestra progreso y mucho más.

Sintaxis básica y conceptos clave

La forma general del comando es: rsync ORIGEN DESTINO. ORIGEN y DESTINO pueden ser rutas locales o endpoints remotos mediante SSH, por ejemplo usuario@host:/ruta.

Al usar un host remoto, la sintaxis es: rsync HOST:RUTA_REMOTA RUTA_LOCAL (pull, traer) o rsync RUTA_LOCAL HOST:RUTA_REMOTA (push, enviar). En ambos casos, la fuente va primero y el destino después.

rsync   
rsync  HOST:ORIGEN_REMOTO DESTINO_LOCAL   # PULL
rsync  ORIGEN_LOCAL HOST:DESTINO_REMOTO   # PUSH

Hay un matiz vital: la barra final en el origen. ORIGEN/ (con barra) significa “contenido de ORIGEN”; si omites la barra, rsync creará el directorio ORIGEN dentro del destino.

Comprobar e instalar rsync

Primero, verifica si está disponible con rsync –version; verás número y protocolo. Si no lo tienes, puedes instalarlo con el gestor de tu distribución.

# Debian/Ubuntu
sudo apt-get update
sudo apt-get install rsync

# Red Hat / CentOS / Fedora
sudo yum install rsync    # o: sudo dnf install rsync

# macOS (Homebrew)
brew install rsync

Si administras un servidor desde Windows, puedes conectarte por SSH usando PuTTY y ejecutar los mismos comandos desde la terminal remota.

Primeros pasos: sincronización local rápida

Prepara dos carpetas de prueba y algunos archivos vacíos. Así comprobarás la diferencia entre copiar todo y actualizar solo cambios gracias al algoritmo de rsync.

cd ~
mkdir dir1 dir2
# Crea 100 ficheros vacíos
bash -c 'touch dir1/file{1..100}'

# Sincroniza de dir1 a dir2 (recursivo)
rsync -r dir1/ dir2

# O en modo "archivo" (recomendado)
rsync -a dir1/ dir2

La opción -r copia de forma recursiva; -a (archive) engloba -r y además preserva permisos, propietario, grupo, marcas de tiempo y enlaces simbólicos.

  Organizar biblioteca de juegos con LaunchBox o Playnite: todo el entretenimiento centralizado

Barra final en el origen: el detalle que evita sorpresas

Este comportamiento es clave: dir1/ transfiere el contenido; dir1 copia el directorio en bloque dentro del destino. Compruébalo sin riesgos con un ensayo en seco.

# Ensayo (no cambia nada) y verboso
rsync -anv dir1/ dir2     # contenido de dir1 hacia dir2
rsync -anv dir1  dir2     # crea dir2/dir1/...

Para operaciones delicadas, acostúmbrate a añadir -n/–dry-run y revisar la salida antes de ejecutar de verdad. Un pequeño hábito que evita disgustos.

Sincronización remota con SSH: push y pull

Si tienes SSH en el equipo remoto y rsync instalado a ambos lados, enviar o traer datos es tan simple como una ruta con usuario@host. Por defecto rsync usará SSH como “shell remoto”.

# PUSH: del local al remoto (transferimos el directorio completo)
rsync -a ~/dir1 usuario@servidor:/ruta/destino

# PULL: del remoto al local (traemos contenidos)
rsync -a usuario@servidor:/home/usuario/dir1 /ruta/local

# Especificar el puerto SSH y usar compresión y progreso
rsync -azP -e 'ssh -p 2222' origen/ usuario@servidor:/destino/

Las opciones -z (comprensión) y -P (progreso + parciales) son mano de santo en redes lentas: verás barras de avance y podrás reanudar si la conexión se corta.

Autenticación sin contraseña con claves SSH

Para automatizar sincronizaciones, conviene usar claves. Genera un par RSA/ed25519, copia la pública al servidor y úsala con rsync para evitar prompts de contraseña.

# En el cliente (usuario local)
ssh-keygen -t rsa -b 4096 -C "Acceso rsync" -f ~/.ssh/rsync_key -q -N ""
ssh-copy-id -i ~/.ssh/rsync_key.pub usuario@servidor

# Probar acceso por clave
ssh -i ~/.ssh/rsync_key usuario@servidor

# Usar la clave con rsync (dos formas equivalentes)
rsync -az -e 'ssh -i ~/.ssh/rsync_key' origen/ usuario@servidor:/destino/
rsync -az --rsh="ssh -i ~/.ssh/rsync_key" origen/ usuario@servidor:/destino/

Si en el destino no tienes permisos de root, puedes ignorar propietario y grupo con –no-o y –no-g, lo que evita errores de atribución en sistemas multiusuario.

Opciones esenciales que vas a usar todo el tiempo

Las combinaciones más habituales mezclan -a (archive), -v (verbose), -z (compress), -P (progreso/parciales) según el caso. Apunta estos imprescindibles.

  • -a: recursivo y preserva permisos, tiempos, propietario, grupo, enlaces y especiales.
  • -v: más salida informativa; con -h verás tamaños “human-readable”.
  • -z: comprime durante la transferencia (evítalo si los ficheros ya están comprimidos).
  • -P: equivale a –progress + –partial; ideal para enlaces inestables.
  Change Default Printer in Home windows 10

También muy útiles: -u (update, no pisa si el destino es más nuevo), -n (dry-run) y -e para el shell remoto (por ejemplo, SSH con puerto o clave).

Progreso, compresión y reanudación sin perder el tiempo

Para visualizar lo que ocurre y no empezar de cero tras un corte, -azP suele ser la receta ganadora. Verás cuánto resta y rsync guardará trozos parciales para continuar.

rsync -azP origen/ destino/
# Repetirlo cuando no cambie nada da una salida mínima: rsync detecta que todo está al día

Si tras tocar fechas con touch o modificar algunos ficheros vuelves a lanzar el comando, solo se enviarán los alterados, confirmando la eficiencia del delta-transfer.

Exclusiones e inclusiones por patrón

Cuando no quieres llevarte todo, usa –exclude y –include para afinar. Puedes excluir por nombre, ruta o extensión, o cargar una lista desde un archivo.

# Excluir un directorio, un fichero y rutas concretas
rsync -av --exclude 'cache/' --exclude 'secreto.doc' --exclude 'ruta/subdir' origen/ destino/

# Excluir desde archivo (uno por línea)
rsync -av --exclude-from 'lista_excluidos.txt' origen/ destino/

# Solo copiar .jpg en toda la jerarquía (incluye directorios, excluye el resto)
rsync -vrhz --include="*/" --include="*.jpg" --exclude="*" original/ duplicados/

Si te pasas con las exclusiones, siempre puedes invertir la lógica con –include para permitir lo que realmente quieres y bloquear el resto con –exclude «*».

Eliminar en destino de forma controlada (–delete y variantes)

Para una sincronización “espejo”, activa –delete y desaparecerán en el destino los ficheros que ya no existen en el origen. Úsalo con cautela y siempre prueba con –dry-run antes.

# Sincronización espejo (borra en destino lo que ya no está en origen)
rsync -av --delete origen/ destino/

Políticas de borrado: –delete-before (borra antes de transferir), –delete-during (durante la recepción; predeterminado en versiones modernas) y –delete-delay (detecta faltantes y borra al final). –delete-after existe, pero suele ser menos eficiente salvo escenarios muy concretos.

Límites de tamaño y de ancho de banda

Para evitar saturar la red o filtrar por peso, usa –max-size y –min-size junto a –bwlimit. Útiles en copias masivas o backups con políticas específicas.

# Solo archivos <= 100 MB y límite de 5 MB/s
rsync -avzh --max-size='100M' --bwlimit=5120 origen/ destino/

# No transferir nada por debajo de 10 KB
dsync -av --min-size=10k origen/ destino/

Cuando mueves muchísimos ficheros pequeños, -W/–whole-file fuerza enviar el archivo entero y puede acelerar si el delta no compensa la latencia.

Copias de seguridad sin sobresaltos (–backup y –backup-dir)

Si te preocupa sobreescribir, combina –backup con –backup-dir para conservar versiones previas en una carpeta de salvaguarda. Es un “seguro” muy práctico.

# Guarda versiones reemplazadas/eliminadas en /var/backups/rsync
rsync -a --delete --backup --backup-dir=/var/backups/rsync /ruta/origen/ /ruta/destino/

Así, cualquier fichero modificado o borrado en el destino quedará a salvo en el directorio indicado, facilitando una vuelta atrás rápida si algo no sale como esperabas.

  Cómo usar LockHunter para ver el proceso que bloquea un archivo

Automatizar con cron (sin prompts ni ruido)

Para ejecutar sincronizaciones periódicas, añade una entrada en cron. Usa claves SSH, evita –progress y, si quieres, vuelca un log para auditoría.

# Cada hora, con clave e ignorando propietario y grupo
0 * * * * rsync -arz --no-o --no-g --delete --rsh="ssh -i /home/u/.ssh/rsync_key" /home/u/backup/ u@servidor:"/home/u/backup" >> /var/log/rsync.log 2>&1

Si sincronizas en sentido contrario, invierte ORIGEN y DESTINO. El registro con –log-file o redirección te ayudará a revisar qué se ha transferido y cuándo.

Trucos avanzados y escenarios reales

Además de lo clásico, rsync tiene banderas menos conocidas pero muy útiles: -c (checksum, ignora fechas/tamaños y compara por hash), –size-only (solo tamaño), -I/–ignore-times (copia todo), –remove-source-files (mueve en vez de copiar, no borra directorios).

# Solo actualizar si cambia el hash (más preciso, más CPU)
rsync -avuc origen/ destino/

# Mover ficheros (borra en origen los que se copien bien)
rsync -av --remove-source-files origen/ destino/

# Preservar enlaces, dueños y especiales (requiere permisos adecuados)
rsync -aLptgoD origen/ destino/

Con servidores remotos, puedes sincronizar dos máquinas Linux vía SSH cada hora con cron y claves. Si necesitas “casi tiempo real”, échale un ojo a Lsyncd, un demonio que reacciona a cambios del sistema de ficheros y llama a rsync automáticamente. Si prefieres una interfaz gráfica, prueba a sincronizar carpetas locales y en red con FreeFileSync.

Ejemplos compactos que te sacan de apuros

Aquí tienes recetas rápidas para recordar. Puedes adaptarlas a tus rutas y usuarios sin problemas.

# Copiar localmente con progreso y tamaños legibles
rsync -avhP /carpeta1/ /carpeta2/

# Sincronizar dos hosts (pull) con progreso
rsync -avP root@X.Y.Z.W:/carpeta1/ /carpeta2/

# Solo archivos modificados (update) a un remoto
rsync -vzh -u posts/*.md blog@host:/ruta/posts/

# Ensayo general (no cambia nada) y listado detallado
rsync -avhni --itemize-changes origen/ destino/

Cuando te enfrentas a estructuras grandes, combina exclusiones, límites y progreso para tener control absoluto de lo que viaja y cómo lo hace.

Dominar rsync es cuestión de práctica: ensaya con –dry-run, usa -a como base, añade -z/-P en red y controla –delete con cabeza. Con claves SSH y cron tendrás sincronizaciones automáticas, seguras y eficientes tanto en local como entre servidores.

sincronizar carpetas locales y en red con FreeFileSync
Artículo relacionado:
Sincronizar carpetas locales y en red con FreeFileSync: guía completa