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.

  Configura una carpeta compartida para toda la familia en Windows 11

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.
  Find out how to Repair iPhone Not Detected 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.

  Ejemplo: ¿Cómo puedo compartir mi cuenta de Spotify con mis amigos y familiares?

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