Linux / Comando rsync: sincronizar archivos y revisar cambios antes de copiar

rsync copia archivos entre ubicaciones locales o remotas y sincroniza de manera eficiente los elementos que han cambiado. Es útil para la transferencia repetida de grandes cantidades de datos, pero si se especifican incorrectamente la ruta de destino y las opciones de eliminación, se pueden perder datos.

La comprobación rápida predeterminada compara tamaño y hora de modificación, no todos los bytes del archivo. -a combina copia recursiva con preservación de varios metadatos. En estos ejemplos, con el destino ya existente como directorio, source/ copia su contenido y source añade el propio directorio bajo el destino. Una ruta remota por SSH usa usuario@host:ruta.

Sintaxis básica

rsync [opciones] origen destino

La implementación instalada y las opciones pueden variar según la distribución. Verifique la descripción de man rsync en el sistema actual.

Ejemplos de uso

Vista previa antes del cambio real

Compruebe que rsync está instalado, por ejemplo con command -v rsync. Los ejemplos requieren un directorio project/ con datos de prueba y un destino separado; prepare backup/project/ en el laboratorio, sin datos que deba conservar. El ejemplo posterior con source/ presupone un archivo source/notes.txt y un directorio backup/ ya existente.

rsync -av --dry-run project/ backup/project/

Sincronización de directorios locales

Copia el contenido del directorio de origen al destino.

rsync -av project/ backup/project/

Transferencia remota por SSH

rsync debe estar instalado también en la máquina remota, y se deben reemplazar la cuenta y la ruta por los valores reales.

rsync -av project/ alice@server.example.com:/home/alice/project/

Vista previa antes de la copia real

rsync --dry-run muestra la lista de archivos que se modificarán, pero no copia los datos realmente. La estructura de directorios creada en el destino varía según la presencia o ausencia de la barra al final.

rsync -av --dry-run source/ backup/

Ejemplo de salida cuando hay notes.txt dentro de source/ y no existe en el destino:

sending incremental file list
notes.txt

Con source/, el plan coloca el contenido dentro de backup/. --delete puede retirar elementos que solo están en el destino: revise sus reglas y la simulación antes de usarlo. Después de copiar, compruebe recuentos, tamaños y, cuando corresponda, sumas de comprobación y una restauración real. La comprobación de copias y restauración con tar explica otro flujo de recuperación, y la automatización de copias y controles del servidor ayuda a planificar verificaciones periódicas.

-a combina la copia recursiva y la conservación de algunos metadatos, pero no es una opción de copia de seguridad completa que conserve siempre todos los atributos como ACL, atributos extendidos o enlaces duros. Para los atributos necesarios, verifique el sistema de archivos y los permisos del destino antes de especificarlos con opciones separadas. Si el resultado de la sincronización es importante, también se debe realizar una prueba de restauración en el destino.

Opciones y formatos principales

Opción o formato Descripción
-a Modo de archivo que combina la copia recursiva y la conservación de atributos principales.
-v Muestra los elementos de procesamiento en detalle.
-n, --dry-run Muestra el plan sin copiar ni eliminar archivos del destino.
--delete Puede eliminar entradas que solo existen en el destino, según las reglas de filtro; revíselo antes.
--exclude=patrón Excluye archivos con el patrón especificado de la transferencia.
-e 'ssh -p puerto' Especifica comandos de shell remotos y puertos.

Precauciones al usar

--delete elimina realmente los archivos de destino. Verifique las barras finales en las rutas de origen y destino y las reglas de filtro, y revise la lista de eliminación con --dry-run. rsync no es una copia de seguridad en sí misma y los errores o daños del original también pueden replicarse. La transferencia remota normalmente requiere rsync en ambos lados, y el modo de archivo no conserva completamente ACL ni atributos extendidos.

Preguntas frecuentes

¿Cuál es la diferencia entre source y source/ en rsync?

source/ transfiere el contenido de ese directorio, mientras que source copia el directorio en sí mismo bajo el destino.

Documentación oficial

El funcionamiento exacto de las opciones y las diferencias según la implementación se pueden consultar en la documentación oficial de rsync.