~/docs /RSYNC

RSYNC

RSYNC

Imported from Notion: RSYNC

updated:: 2026.07.10

Sincronización de directorios con exclusiones

rsync permite copiar y sincronizar directorios de forma eficiente, conservando permisos, marcas de tiempo, enlaces simbólicos y estructura de rutas. Es una herramienta especialmente útil cuando necesitas enviar todo un directorio pero dejando fuera rutas concretas, como archivos sensibles, artefactos de compilación o dependencias pesadas.

important

En entornos reales, valida siempre las exclusiones antes de ejecutar la sincronización, especialmente si el destino contiene datos importantes o si vas a usar --delete.


Caso de uso típico

Cuando quieres desplegar un proyecto, respaldar una carpeta o sincronizar contenido entre equipos, rsync te permite copiar casi todo el directorio y excluir elementos puntuales sin tener que preparar una lista manual de archivos.

Ejemplos comunes de exclusión:

  • Archivos de configuración sensible, como .env

  • Dependencias, como node_modules

  • Carpeta de control de versiones, como .git

  • Salidas de compilación, como dist, build o target


Ejemplo básico

Para enviar todo el directorio salvo algunas rutas:

rsync -avz \
  --exclude='.env' \
  --exclude='node_modules' \
  ./ usuario@host:/ruta/destino/

Qué hace cada opción

OpciónDescripción
-aModo archivo: conserva permisos, tiempos, enlaces simbólicos, propietarios, grupos y estructura.
-vMuestra información detallada durante la transferencia.
-zComprime los datos durante el envío para reducir tráfico.
--exclude='.env'Excluye el archivo .env.
--exclude='node_modules'Excluye la carpeta node_modules.
validated

-a equivale aproximadamente a -rlptgoD, por lo que suele ser la opción base más cómoda para sincronizaciones completas.


Variantes útiles

Si quieres excluir varios elementos más, puedes añadir más reglas:

rsync -avz \
  --exclude='.env' \
  --exclude='node_modules' \
  --exclude='.git' \
  --exclude='dist' \
  ./ usuario@host:/ruta/destino/

Si prefieres ver qué se copiaría antes de ejecutar la transferencia real, usa simulación:

rsync -avzn \
  --exclude='.env' \
  --exclude='node_modules' \
  ./ usuario@host:/ruta/destino/
tip

-n activa el modo simulación, ideal para comprobar exclusiones, revisar el alcance real de la copia y evitar sobrescribir contenido por error.


Exclusiones con patrones

rsync no solo excluye nombres exactos; también admite patrones. Esto es útil cuando quieres filtrar extensiones, rutas parciales o familias de archivos.

Ejemplos frecuentes

rsync -av \
  --exclude='*.log' \
  --exclude='*.tmp' \
  --exclude='cache/' \
  ./ usuario@host:/ruta/destino/
PatrónQué excluye
*.logTodos los archivos .log.
*.tmpTodos los archivos temporales .tmp.
cache/El directorio cache y su contenido.
validated

Si dudas entre excluir un archivo o una carpeta, prueba primero con --dry-run (-n) y revisa la salida con cuidado.


Usar un archivo de exclusiones

Cuando la lista de exclusiones crece, resulta más limpio guardarla en un archivo. Así evitas repetir opciones largas en cada comando.

exclude.txt

.env
node_modules
.git
dist
*.log

Ejecución con archivo de exclusión

rsync -avz \
  --exclude-from='exclude.txt' \
  ./ usuario@host:/ruta/destino/
OpciónDescripción
--exclude-from='exclude.txt'Lee una lista de exclusiones desde un archivo.
important

Mantener las exclusiones en un archivo facilita reutilizar la misma política en despliegues, backups y sincronizaciones recurrentes.


Buenas prácticas

  • Usa comillas en las rutas a excluir para evitar problemas con espacios o caracteres especiales.

  • Revisa si necesitas excluir directorios completos o solo archivos concretos.

  • Verifica si el patrón debe aplicarse al nombre exacto o a cualquier coincidencia parcial.

  • Prueba primero con -n antes de sincronizar en producción.

  • Añade --delete solo si quieres que el destino refleje exactamente el origen.

warning

--delete puede borrar archivos en el destino que no existan en el origen. Úsalo solo si tienes claro su impacto y siempre revisa primero con modo simulación.


Ejemplo con sincronización más estricta

Si quieres que el destino quede exactamente igual al origen, excepto por las exclusiones definidas:

rsync -avz --delete \
  --exclude='.env' \
  --exclude='node_modules' \
  --exclude='.git' \
  ./ usuario@host:/ruta/destino/

Paso a paso

  1. Ejecuta primero una simulación:
   rsync -avzn --delete \
     --exclude='.env' \
     --exclude='node_modules' \
     --exclude='.git' \
     ./ usuario@host:/ruta/destino/
  1. Revisa la salida.

  2. Ejecuta la sincronización real solo si el resultado es el esperado.


Ejemplos prácticos adicionales

Sincronizar un proyecto web excluyendo dependencias y secretos

rsync -avz \
  --exclude='.env' \
  --exclude='node_modules' \
  --exclude='coverage' \
  --exclude='dist' \
  ./ proyecto@servidor:/var/www/app/

Copiar una copia de seguridad excluyendo logs y cachés

rsync -avz \
  --exclude='*.log' \
  --exclude='cache/' \
  --exclude='tmp/' \
  /origen/ /backup/

Ver exactamente qué cambios se aplicarían

rsync -avzni \
  --exclude='.env' \
  --exclude='node_modules' \
  ./ usuario@host:/ruta/destino/
validated

Para depurar una sincronización, -i muestra un resumen de cambios por archivo, lo que ayuda a detectar borrados, actualizaciones y archivos nuevos antes de aplicar la copia real.


Resumen rápido

EscenarioOpción recomendada
Copia conservando metadatos-a
Ver progreso o detalles-v
Reducir tráfico en red-z
Probar sin cambios reales-n
Excluir rutas puntuales--exclude
Reutilizar varias exclusiones--exclude-from
Sincronización espejo--delete

- EOF -