Cómo utilizar el comando Rsync de Linux (sincronización remota)
El comando rsync de Linux transfiere y sincroniza archivos o directorios de manera eficiente entre una máquina local, un servidor remoto o cualquiera de estos. Cualquier persona que trabaje con sistemas basados en Linux debería usar este poderoso comando para mejorar su productividad. Con la ayuda de este artículo, aprenderás todo lo que necesitas saber para comenzar a usar el comando rsync.
Sincronizar carpetas o copiar archivos manualmente puede llevar mucho tiempo. La utilidad rsync de Linux puede hacer la mayor parte del trabajo por ti al mismo tiempo que agrega excelentes funciones para ahorrar tiempo. Incluso si pierdes la conexión durante la transferencia, esta herramienta continuará exactamente donde se quedó, una vez que se restablezca la conexión.
Tabla de Contenidos
Sintaxis básica
La sintaxis básica para rsync funciona de la siguiente manera:
rsync [optional modifiers] [SRC] [DEST]
Hay un par de formas diferentes en las que puedes usar rsync en Linux. En este ejemplo, [optional modifiers] indica las acciones a realizar, [SRC] es el directorio de origen y [DEST] es el directorio o la máquina de destino.
Sintaxis Básica para Shell Remoto
Cuando se utiliza un shell remoto, como SSH o RSH, la sintaxis de rsync es ligeramente diferente.
Para acceder al shell remoto (PULL) usa el comando rsync:
rsync [optional modifiers] [USER@]HOST:SRC [DEST]
Para acceder al shell remoto (PUSH) usa el comando rsync:
rsync [optional modifiers] SRC [USER@]HOST:[DEST]
Cómo comprobar la versión de Rsync
Antes de verificar si Rsync está instalado, debemos iniciar sesión en el servidor VPS que usaremos. Este útil tutorial te mostrará cómo hacerlo en una máquina Windows usando Putty SSH. Si estás usando una computadora MacOS o Linux, usa el terminal en su lugar.
Rsync viene preinstalado con muchas distribuciones de Linux. Para verificar si rsync está instalado en tu máquina, ejecuta el siguiente comando:
rsync -version
En nuestra distribución de Ubuntu, el comando produjo el siguiente resultado:
rsync version 3.1.2 protocol version 31
Eso significa que rsync versión 3.1.2 ya está en nuestra máquina. Fácil, ¿verdad?
Instalando Rsync
Si tu máquina no tiene rsync preinstalado, ¡puedes hacerlo manualmente en solo un minuto! En las distribuciones basadas en Debian, como Ubuntu, puedes hacerlo usando los siguientes comandos:
apt-get install rsync
En distribuciones basadas en rpm como Fedora y CentOS, usa el siguiente comando:
yum install rsync
Y en MacOS puedes usar el siguiente comando:
brew install rsync
¡Eso es todo! Linux Rsync estará listo para sincronizar datos, realizar transferencias de archivos y eliminar archivos. Puedes verificar si la instalación fue exitosa usando el comando mencionado anteriormente:
rsync -version
Trabajando con Rsync
Para este tutorial, creamos dos directorios en nuestro escritorio de Linux con los nombres Original y Duplicate. El directorio original contiene tres imágenes mientras que el duplicado está vacío. Ahora veamos cómo Rsync creará nuevas formas de aumentar la productividad.
Para crear dos directorios de prueba, usa los siguientes comandos:
cd ~ mkdir original mkdir duplicate touch original/file{1..3}
Si deseas volver a verificar, usa el comando ls para listar todos los archivos dentro del directorio:
ls original
La salida se verá similar a esto:
file1 file2 file3
Si usas el comando ls con el directorio duplicado, el resultado debería estar vacío.
Ahora que los directorios están configurados, probemos algunos comandos más.
El siguiente comando copiará o sincronizará todos los archivos del directorio original en el directorio duplicado.
rsync original/* duplicado/
* le indica al comando rsync que sincronice todo en el directorio original con el duplicado.
Si colocamos una nueva imagen o archivo en la carpeta original y volvemos a ejecutar el mismo comando, solo la nueva imagen se copiará en el destino.
Esta función es útil cuando copia archivos en una red con ancho de banda limitado.
Comandos más comunes de Rsync
Aquí hay una lista de los comandos más comunes que se usan con rsync:
Este habilita el modo de archivo.
-a, --archive
El siguiente te brinda una salida visual que muestra el progreso del proceso.
-v, --verbose
Este genera en un formato legible para humanos.
-h, --human-readable format
El siguiente comprime los datos del archivo durante la transferencia.
-z, --compress
Este es para copiar datos de forma recursiva
-r
Cómo usar comandos Rsync con subdirectorios
Ten en cuenta que este comando solo copiará los archivos del directorio principal de la carpeta Original, pero ninguno de los subdirectorios.
Si también quieres copiar los subdirectorios, necesitarás usar este comando:
rsync -r original/ duplicate/
La opción -r (-recursivo) le dice a rsync que copie todo, incluidos los subdirectorios y los archivos de nuestra carpeta original.
El modificador / usado después de original le indica a rsync que copie el contenido del directorio original en la carpeta duplicada.
Cómo sincronizar archivos
Si lo que quieres es sincronizar archivos, es decir, copiar los archivos que podrían estar en la carpeta de destino, pero que no están en la carpeta original, a la carpeta original, usa el siguiente comando:
rsync -r original duplicate/
Con este comando, podemos estar seguros de que tanto la carpeta original como la duplicada contengan los mismos archivos.
Cómo combinar comandos Rsync
Otra opción útil es -a (-archivo), que puede unirse con muchos otros comandos. Eso significa que no solo copia los archivos, sino que también copia los permisos, los tiempos de modificación y cualquier otra fecha.
Usar el comando -a con -v se vería similar a esto:
rsync -av --dry-run original/ duplicate/
No te preocupes, no es tan complicado como parece. Vamos a desglosarlo.
Este comando solo mostrará los archivos que se copiarán pero sin hacer ningún cambio real. Con este comando, puedes obtener una lista de los archivos que se copiarán.
Si todos los archivos mostrados son los que quieres copiar, vuelve a ejecutar el comando pero sin incluir –dry-run.
–dry-run (o -n) hace que rsync realice una ejecución de prueba que no haga ningún cambio.
Otras opciones para los comandos Rysnc
Al agregar la opción -a a la opción -v, obteniendo -av en nuestro comando aumenta la verbosidad. Así es como debería verse:
rsync -av original/ duplicate/
Si quieres sincronizar las dos carpetas y eliminar los elementos del duplicado que no estén presentes en la carpeta original, agrega -delete, así:
rsync -av --delete original/ duplicate/
También puedes excluir archivos o subdirectorios específicos cuando sincronizas dos carpetas. Puedes hacerlo agregando -exclude=. Si necesitas especificar más de un archivo, sepáralos con una coma.
rsync -av --exclude=file1,file2 original/ duplicate/
También puedes incluir archivos o subdirectorios específicos cuando estás sincronizando. Haz esto agregando -include=. También puedes usar esto con la opción -exclude=. El siguiente ejemplo incluirá archivos que comienzan con la letra L y excluirá todos los demás archivos:
rsync -av --include=L* --exclude=* original/ duplicate/
Con Rsync, también puedes especificar el tamaño del archivo a sincronizar. Para hacer esto, usa la opción –max-size:
rsync -av --max-size=10k original/ duplicate/
Usando la opción -z (-comprimir) comprimirás los archivos que se están transfiriendo a través de la red. Y a manera de bono extra, veamos cómo realizar una transferencia desde el servidor de origen a otro. El comando se vería así:
rsync -za ~/Desktop/Original edward@192.168.22.90:~/tmp/
Como se mencionó anteriormente, -z comprime los archivos, -a, o simplemente agregando “a” a -z, asegurará que todos los permisos también se copien.
~/Desktop/Original es la fuente. Es un directorio local: el que está en la máquina en la que estás conectado y, por último, edward@192.168.22.90: ~/tmp/ indica el destino. edward@192.168.22.90 es la dirección del servidor remoto de destino, mientras que: ~/tmp/ apunta a una carpeta específica en esa máquina.
Cómo agregar una barra de progreso
Además de los comandos anteriores, puedes agregar -P que combinará las opciones -progreso y –parcial. Esto te dará una barra de progreso para los archivos que se están transfiriendo y también te permitirá reanudar cualquier transferencia de archivos interrumpida.
rsync -azP [SRC] [DEST]
El resultado se verá similar a esto:
sending incremental file list ./ file1 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=1/3) file2 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=2/3) file3 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=3/3)
Luego, si ejecutas el comando nuevamente, verás un resultado más corto. Esto se debe a que no se han realizado nuevos cambios. El resultado se verá similar a esto:
sending incremental file list send 26 bytes received 5 bytes 1200.00 bytes/sec total size is 0 speedup is 0.00
Si solo deseas transferir ciertos archivos, puedes especificarlos con el siguiente comando:
touch original/file{1..5} rsync -azP [SRC] [DEST]
Esto dará un resultado similar al del comando anterior, pero solo con los archivos especificados entre corchetes.
Cómo crear una copia de seguridad Rsync
Otro comando importante es el que permite crear una copia de seguridad Rsync. Puedes hacerlo combinando –backup con el comando –dir para que puedas especificar dónde se almacenarán los archivos de respaldo.
rsync -a --delete --backup --backup-dir=/path/to/backup /path/to/SRC [DEST]
Conclusión
Solo hemos visto la punta del iceberg. Linux Rsync es una utilidad increíblemente poderosa que todos los administradores de servidores o desarrolladores de Linux deberían conocer. Hemos visto todo lo necesario para que puedas comenzar, desde la instalación hasta los comandos básicos. Si deseas conocer las funciones más avanzadas, consulta la documentación oficial.
¡Prepárate para mejorar tu productividad! Y buena suerte con tu proyecto.