Skip to main content

rsync

Uso de rsync

rsync es la herramienta de copiado y sincronización de archivos más potente que existe en el mundo de Linux, es rápida, versatil para el copiado local y remoto de archivos. Ofrece una larga lista de opciones que controlan todos los posibles aspectos de su comportamiento.

El 'secreto' de rsync es su algoritmo llamado 'delta-transfer' que reduce la cantidad de datos que se envían vía red al enviar solo las diferencias que hay entre dos archivos a nivel de sus metadatos (permisos, fechas de acceso, etc) y del contenido de sus datos a nivel de bloques en disco.

Sintaxis

El modo de uso de rsync es idéntica a los comandos cp o scp, es decir, rsync [opciones] origen [destino]

El 'destino' en rsync se dice que es opcional porque si solo se usa el origen, entonces equivale a listar el directorio o archivo origen.

Tanto el 'origen' como el 'destino' pueden ser locales o remotos

Opciones

Opción Descripción
Corta Larga
-a --archive Modo archive, es igual a indicar las opciones r,l,p,t,g,o y D
-r --recursive Recursivo, copia recursivamente los directorios.
-l --links Cuando encuentra symlinks (enlaces simbólicos), estos son recreados en el destino.
-p --perms Opción que causa en el destino establecer los permisos igual que en el origen.
-t --times Transfiere los tiempos de los archivos (atime, ctime, mtime) al destino
-g --group Establece en el destino que el grupo del archivo copiado sea igual que el origen.
-o --owner Establece en el destino que el propietario del archivo copiado sea igual que el origen.
-D
Esto es igual que indicar las opciones --devices y --specials

--exclude PATTERN Excluye archivos que igualan el patrón o pattern indicado.

--include PATTERN Incluye archivos que igualan el patrón o pattern indicado.

--devices Transfiere archivos de dispositivos de bloque y caracter al destino donde son recreados. Esto solo puede suceder si en el destino se tienen permisos de root.

--specials Transfiere archivos especiales como fifos y named sockets.

--version Indica el número de versión de rsync
-v --verbose Incrementa la cantidad de información que se informa durante la transferencia o copia de archivos. Es la opción contraria a --quiet
-q --quiet Decremente la cantidad de información que se informa durante la transferecnia o copia de archivos. Generalmente se utiliza cuando rsync se utiliza en una tarea cron. Es la opción contraria a --verbose
-I --ignore-times Una de las grandes virtudes de rsync es que al momento de copiar o transferir archivos, si estos son iguales en el destino en términos de tiempos y tamaño ya no lo copia, no hay cambios. Esta opción permite que esto sea ignorado y todos los archivos serán copiados/actualizados en el destino. (ver --size-only también)

--size-only Normalmente solo se transfieren archivos con los tiempos cambiados o el tamaño cambiado. Con esta opción se ignoran los tiempos de los archivos y se transfiere cualquiera con un tamaño distinto en el destino.
-n --dry-run Crea una prueba de test de lo que realmente ocurrirá sin esta opción, sin realizar ningún cambio. Es decir, la salida mostrada será muy similar a lo que realmente pasará si no se incluye --dry-run. Generalmente se usa junto con la opción --verbose y la opción --itemize-changes
-i --itemize-changes Reporta una lista de los cambios realizados en cada archivo, incluidos cambios en sus atributos. Esto es equivalente a utilizar -vv en versiones obsolteas de rsync.

--remove-source-files Remueve los archivos en el origen (no directorios) si en el destino estos fueron exitosamente duplicados o copiados.

--timeout=TIEMPO Especifica un timeout en segundos, si no datos son transferidos en tiempo indicado rsync terminará. El default es 0 segundos que quiere decir sin timeout.

--log-file=ARCHIVO Bitacoriza lo que se ha realizado en el ARCHIVO indicado.

--stats Imprime un conjunto informativo de datos estadísticos sobre la transferencia realizada.

--progress Muestra el avance o progreso de los archivos que están siendo transferidos.

--bwlimit=KBPS Permite establecer un límite de transferencia en kilobytes por segundo. Esta opción su default es 0, lo que indica no límite en el uso del ancho de banda en la transferencia.

--max-size=TAMAÑO No transfiere cualquier archivo más grande que el TAMAÑO indicado.

--min-size=TAMAÑO No transfiere cualquier archivo más pequeño que el TAMAÑO indicado.
-z --compress Comprimir datos durante la transferencia.

Ejemplos

Sincronizar entre dos carpetas

rsync -avP /carpeta1/* /carpeta2/.

Sincronizar entre hosts

rsync -avP root@w.x.y.z:/carpeta1/* /carpeta2/.

Transferir archivos de determinado tamaño

rsync -avzhP --max-size='100M' /carpeta1  root@w.x.y.z:/carpeta2/

En esta caso sólo se copiarán los archivos menores de 100 Mb

Sincronizar archivos completamente entre dos carpetas o servidores

Esto permite actualizar archivos en destino, y si no existen en origen, los borra

rsync -avhP origen/ destino/ --delete-after