SINCRONIZACIÓN REMOTA CON RSYNC

rsync es una de las herramientas más potentes y utilizadas en sistemas Linux/Unix (y también disponible en Windows vía WSL o Cygwin) para copiar, sincronizar y transferir archivos y directorios de forma muy eficiente.
Su gran ventaja es el algoritmo delta-transfer (o de diferencias):
  • No copia siempre todo el archivo.
  • Solo transfiere las partes que han cambiado (incluso a nivel de bloques dentro del mismo archivo).
Esto lo hace extremadamente rápido y ahorra muchísimo ancho de banda, sobre todo cuando:
  • Se hacen copias de seguridad incrementales.
  • Sincronizas sitios web grandes.
  • Migrar servidores.
  • Hacer mirrors de repositorios.
  • Respaldos remotos diarios.

Usos más comunes

  • Copia local: "rsync -av /origen/ /destino/".
  • Copia a servidor remoto (vía SSH): "rsync -avz /carpeta/ usuario@servidor:/ruta/destino/".
  • Copia desde remoto a local: "rsync -avz usuario@servidor:/ruta/origen/ /local/".
  • Sincronización bidireccional (con cuidado): usando herramientas como unison o combinaciones avanzadas.
  • Backups con borrado de archivos eliminados: "rsync -av --delete ...".

Ejemplo práctico

Ejemplo de backup incremental a servidor:

rsync -avz --progress --delete \
  --exclude='.git/' \
  --exclude='node_modules/' \
  /home/usuario/proyectos/ \
  usuario@192.168.1.100:/backups/proyectos/
Esto copia solo lo que cambió, comprime en tránsito, muestra progreso, borra archivos que ya no existen en origen y excluye carpetas innecesarias.

Opciones más usadas (flags importantes)

Flag Significado Para qué sirve
-a archive mode Copia permisos, dueños, fechas, enlaces... (casi siempre se usa)
-v verbose Muestra qué está haciendo
-z compress Comprime los datos durante la transferencia (muy útil en conexiones lentas)
-r recursive Copia directorios recursivamente
--delete delete during transfer Borra en destino lo que ya no está en origen (¡cuidado!)
--progress muestra progreso Barra de progreso por archivo
-h human-readable Tamaños en KB, MB, GB en vez de bytes
--exclude excluir patrones No copiar .git, *.tmp, node_modules, etc.
-e ssh especifica shell remoto Normalmente no hace falta, rsync usa ssh por defecto