Rsync (Remote sync) es una herramienta para copiar y sincronizar archivos y carpetas en el mismo servidor o entre diferentes máquinas en Linux.
Lo que distingue a Rsync del clásico "copiar y pegar" es que esta herramienta reconoce automáticamente qué documentos difieren entre dos carpetas, para acelerar el proceso de copia de una carpeta de origen a una de destino.
En este artículo aprenderá cómo instalar, configurar y usar Rsync en Linux Ubuntu 18.04 para sincronizar archivos y carpetas y programar una copia de seguridad periódica de su servidor.
Instalación
Los paquetes rsync ya están presentes en el Repositorio Oficial de Ubuntu. Para instalarlo escribe:
$ sudo apt install rsync
Sintaxis
$ rsync options /path/source/ /path/destination/
Las opciones disponibles son:
-
-v:los archivos y carpetas copiados se mostrarán en el shell
-r:para copiar las carpetas y sus contenidos
-h:en lugar de mostrar el tamaño de los archivos copiados en bytes, se mostrará un formato de fácil lectura (en lugar de 14.167.396 bytes , se verán 14,17 Mb)
-z:para comprimir los datos transferidos
-a:muestra la información original del archivo, como marca de tiempo, permisos, propietario, etc.
-u:al copiar,
--delete:rsync eliminará los archivos en la carpeta de destino que no están presentes en la carpeta de origen.
--exclude:ciertos archivos o carpetas se ignorarán al copiar.
--progress:muestra el porcentaje del proceso de copia y el tiempo restante.
--existente:solo se copiarán los archivos que ya existen en la carpeta de destino.
Sincronización de dos carpetas en la misma computadora
La copia de una carpeta a otra se realiza con el comando "rsync" seguido de la carpeta de origen (desde la cual se copian los elementos) y la carpeta de destino. Independientemente del hecho de que la carpeta a copiar contiene carpetas dentro, es preferible agregar la etiqueta a la etiqueta "-r":
$ rsync -r path/source path/destination
Toda la carpeta "origen" se copia en la carpeta "destino".
$ rsync -r ~/source/ ~/destination
El contenido de la carpeta "origen" se copia en la carpeta "destino".
Cuidado con la diferencia entre los dos comandos:al escribir "/" después de la carpeta de origen, se le indica al sistema que copie los archivos contenidos en la carpeta.
No ingresar “/” implica la selección de toda la carpeta y, en consecuencia, la creación de una copia de la carpeta de origen en la carpeta de destino.
Copiar archivos de un solo formato
Rsync también permite la copia de ciertos tipos de archivos únicamente, especificando el formato o el nombre.
Suponiendo que los archivos están en formato "txt", todos los archivos en este formato se pueden copiar escribiendo:
$ rsync path/source_folder/*.txt path/destination_folder
Con "* .txt" ha solicitado expresamente una copia de "todos los archivos .pdf".
Copiando archivos en el protocolo SSH entre dos máquinas
También puede usar el protocolo SSH para copiar sus archivos y carpetas de su computadora a otra. El uso de este protocolo garantiza que, durante la transferencia, todos los archivos se cifran y, por tanto, nadie podrá leerlos.
El comando requiere la opción "-e ssh" seguida del origen y el destino de la copia.
$ rsync -r ssh path/source/ [email protected]_machine:/path/destination/
Se requerirá la contraseña del usuario que accede a la máquina de destino.
Copiar archivos según el tamaño
Rsync filtra los archivos a copiar también en función del tamaño que ocupan en el disco.
$ rsync --max-size=15k path/source_folder/*.* path/destination_folder/*.*
Solo se copiarán los archivos de menos de 15Kb.
Los archivos más grandes serán ignorados.
$ rsync --min-size=20k ~/source_folder/*.* ~/destination_folder/*.*
Solo se copiarán los archivos de más de 20 Kb.
Los archivos más pequeños se ignorarán.
Excluir archivos de la copia según la extensión
Si no desea copiar algunos tipos de archivos, puede usar la etiqueta "--exclude" para excluir algunos archivos de la copia según la extensión.
En el siguiente ejemplo, los archivos en formato .PDF no se copiarán de la carpeta "fuente" a la carpeta "destino".
$ rsync -r --exclude="*.pdf" path/source_folder/ path/destination_folder
Eliminar contenido de la carpeta de origen después de la transferencia
Del mismo modo que el concepto de "cortar y pegar", los archivos rsync se pueden mover de una carpeta de origen a una carpeta de destino. En este caso, los archivos se copian en la carpeta de destino y luego se eliminan de la carpeta de origen.
$ rsync -r --remove-source-files path/source_folder path/destination_folder
Configuración del límite de tasa de transferencia
En caso de copiar a través de la red, es posible que deba establecer un límite de velocidad de carga para sus archivos. En este caso, use la etiqueta "--bwlimit =KBPS", reemplazando "KBPS" con la tasa de transferencia deseada.
$ rsync --bwlimit=KBPS -r ssh source_path/folder [email protected]_receiver:/destination_path
Reemplace "KBPS" con el valor máximo de velocidad de transferencia expresado en KB/s (2048 KB/s =2 MB/s)
Realización de copias periódicas y automatizadas
En el caso de usar rsync para hacer una copia de seguridad pero no quieres teclear los comandos cada vez, hay una herramienta perfecta para ti:Cron.
Ya presente en Ubuntu 18.04, este servicio permite establecer algunas "reglas" para la repetición periódica de algunos comandos.
Para comenzar a crear sus reglas y luego comenzar a configurar su proceso de copia automática, escriba:
$ crontab -e
Se abrirá un editor de texto donde indicar qué comando repetir periódicamente. Una vez configuradas las reglas, guárdelas y ciérrelas.
Cómo configurar un crontab
La escritura del crontab debe seguir una sintaxis precisa, especificando 6 parámetros ordenados:
m h dom mon dow command
m:minutos (0-59)
h:horas (0-23)
dom:día del mes (1-31)
lunes:mes (1-12)
dow:día de la semana (0:domingo - 6:sábado)
comando:comando a ejecutar
Ejemplos de posibles configuraciones:
30 * * * * rsync path/source/*.pdf path/destination
(cada mes, cada día y cada hora a los 30 minutos, todos los archivos ".pdf" de la carpeta "origen" se copiarán en la carpeta "destino")
*/2 * * * * rsync path/source/*.pdf path/destination (todos los archivos .pdf presentes en la carpeta "origen" en la carpeta "destino" se copian todos los días del mes, cada 2 minutos)
50 8 * * 1,3 rsync ruta/fuente/*.pdf ruta/destino (el comando para copiar archivos .pdf en la carpeta "fuente" en el "destino" carpeta se ejecuta de lunes a miércoles a las 8:50 am)
Una vez guardado y cerrado el editor, para ver la lista de crontabs escriba:
$ crontab -l