rsync copia y sincroniza archivos entre directorios locales o equipos remotos. En transferencias posteriores puede enviar solo las diferencias necesarias, lo que resulta útil para copias repetidas [1]. Como algunas opciones también pueden borrar datos del destino, conviene entender primero el efecto de las rutas y hacer una simulación.
Copiar un directorio local
La opción -a activa el modo archivo, que conserva recursividad, enlaces simbólicos, permisos y marcas de tiempo, entre otros atributos. No incluye por sí sola todas las opciones posibles de preservación, como ACL o atributos extendidos [1].
rsync -a /ruta/origen/ /ruta/destino/
La barra final de la ruta de origen importa:
/ruta/origen/copia el contenido deorigendentro dedestino./ruta/origencopia el directorioorigencomo una carpeta dentro dedestino.
Antes de ejecutarlo, confirma qué resultado quieres en el destino. La documentación de rsync describe esta diferencia como la distinción entre transferir el directorio en sí y transferir su contenido [1].
Simular y revisar cambios
Añade --dry-run para hacer una simulación que no aplique cambios. --itemize-changes muestra qué elementos rsync propone actualizar:
rsync -a --dry-run --itemize-changes /ruta/origen/ /ruta/destino/
Revisa la salida y las rutas. Cuando hayas confirmado el plan, repite el comando quitando --dry-run [1].
Sincronizar por SSH
Indica el usuario, el host y la ruta remota en uno de los extremos. Por ejemplo, para enviar el contenido de una carpeta local:
rsync -a --dry-run --itemize-changes -e "ssh -p 2222" \
/ruta/origen/ usuario@servidor:/ruta/destino/
-e permite especificar el transporte remoto; aquí configura SSH en el puerto 2222. Si SSH usa el puerto predeterminado, normalmente se puede omitir -e "ssh ...". Puedes invertir origen y destino para descargar desde el servidor:
rsync -a -e "ssh -p 2222" \
usuario@servidor:/ruta/remota/ /ruta/local/
Empieza también esta operación con --dry-run, especialmente si el destino contiene datos que deban conservarse.
Excluir archivos
Usa --exclude para omitir patrones concretos, como archivos de registro:
rsync -a --exclude='*.log' /ruta/origen/ /ruta/destino/
Si el patrón forma parte de un comando que también contiene --delete, comprueba en la simulación qué ficheros quedan protegidos y cuáles se transferirán. No añadas --delete-excluded salvo que quieras que también se eliminen del destino los elementos excluidos [1].
Reflejar el origen con --delete
--delete elimina del destino los elementos que no existen en el origen. No lo añadas a una copia rutinaria sin comprobar primero el alcance: una ruta equivocada o una barra final mal entendida podría provocar borrados no deseados [1].
Simula antes:
rsync -a --delete --dry-run --itemize-changes \
/ruta/origen/ /ruta/destino/
Comprueba cuidadosamente tanto las rutas como las eliminaciones que muestra rsync. Solo entonces ejecuta la sincronización real:
rsync -a --delete /ruta/origen/ /ruta/destino/
Opciones frecuentes
| Opción | Uso |
|---|---|
-a | Modo archivo; recorre directorios y conserva varios atributos habituales. |
-v | Muestra más información durante la operación. |
-h | Presenta tamaños en formato legible para personas. |
--dry-run (-n) | Simula la operación sin aplicar cambios. |
--itemize-changes (-i) | Detalla los cambios propuestos o realizados. |
--exclude='patrón' | Excluye del envío los elementos que coincidan con el patrón. |
--delete | Elimina del destino los elementos que no están en el origen. |
En resumen
- La barra final del origen determina si se copia la carpeta o solo su contenido.
- Usa
--dry-run --itemize-changespara revisar una operación antes de ejecutarla. --deleteelimina elementos del destino; simúlalo y confirma las rutas antes de usarlo.- Mantén origen, destino y exclusiones explícitos, sobre todo en scripts de copia.