Cómo dominar el comando rsync en Linux

Como su nombre indica, rsync es una herramienta de sincronización. La primera vez que lo usas, simplemente copia archivos y directorios de una ubicación a otra. Sin embargo, los usos posteriores sincronizan solo las diferencias entre estas ubicaciones. Así que, si agregas un archivo al directorio fuente, rsync solo copiará el nuevo archivo al destino. Esto ahorra mucho tiempo y ancho de banda, especialmente al copiar a una ubicación remota.
Imagina que tienes 50GB de datos que debes sincronizar con un servidor remoto. Puedes programar rsync para que se ejecute a diario. En lugar de tener que copiar los 50GB una y otra vez, la herramienta solo enviará las diferencias. Esto podría significar que solo tiene que cargar unos pocos megabytes de datos cada día, en lugar de gigabytes.
En la imagen destacada arriba, puedes ver cómo la primera vez se transfirieron 104MB, mientras que durante el segundo uso solo se requirieron 31KB.
También lee: Usando Rclone para sincronizar con múltiples proveedores de almacenamiento en la nube en Linux
Cómo instalar rsync en varias distribuciones de Linux
En Debian y distribuciones basadas en Debian, como Ubuntu, puedes instalar rsync con:
sudo apt install rsync
En Fedora, instala con:
dnf install rsyncY en distribuciones derivadas de RedHat (por ejemplo, CentOS):
yum install rsyncPara instalar rsync en Arch Linux, usa el comando:
pacman -S rsyncEn openSUSE, usa:
zypper install rsyncSi no está incluido en tus repositorios predeterminados, consulta la página de instalación de rsync de openSUSE.
Cómo usar rsync para sincronizar archivos o directorios locales
La sintaxis general de rsync es: rsync [opciones] /ruta/al/fuente /ruta/al/destino.
[opciones] representa opciones de la línea de comandos que puedes encontrar en el manual:
man rsync
Presiona q para salir del manual.
Para copiar un archivo:
rsync /bin/ls .El comando anterior es equivalente a rsync /bin/ls /home/tu_nombre_de_usuario. Esto copia el comando “ls” al directorio en el que te encuentras actualmente. Por defecto, esto debería ser /home/tu_nombre_de_usuario. El punto . representa el directorio actual. Los nombres de ruta pueden ser absolutos (/home/tu_nombre_de_usuario/Downloads/chrome.zip) o relativos a tu directorio actual (Downloads/chrome.zip).
Cuando trabajas con archivos muy grandes, puedes usar este comando:
rsync -P /ruta/al/archivo /ruta/al/destinoEsto mostrará el progreso y te permitirá reanudar una transferencia interrumpida. En caso de que necesites reanudar, usa:
rsync -P --append /ruta/al/archivo /ruta/al/destinoSin --append, la transferencia comenzaría desde cero.
Para sincronizar directorios:
rsync -av /ruta/al/fuente /ruta/al/destinoEjemplo de comando:
rsync -av /bin .Efecto de la barra diagonal al final en rsync (Importante)
En el comando anterior, observa que la ruta al directorio fuente no contiene una barra diagonal al final / (/bin vs /bin/). Sin una barra diagonal al final, rsync copia el directorio en sí. Así que rsync -av /bin . resulta en lo que se muestra en la siguiente imagen.

Cuando se usa una barra diagonal al final, rsync copia el contenido de ese directorio. En este caso, cada archivo en /bin se dispersaría en el directorio de destino. Así que rsync -av /bin/ . resultaría en lo que se muestra en la siguiente imagen.

Es muy importante recordar esta diferencia, ya que usar TAB para autocompletar nombres de directorios agrega automáticamente una barra diagonal al final. Así que tenlo en cuenta para evitar crear un desorden en el directorio de destino.
Cómo usar rsync para sincronizar con ubicaciones remotas (por ejemplo, servidores)
Lo que se describió en la sección anterior es válido al trabajar con ubicaciones remotas. La única diferencia es que debes anteponer el nombre de usuario y la dirección de la ubicación remota. Para enviar tu directorio /bin a una computadora remota, usa:
rsync -av /bin [email protected]:/home/tu_nombre_de_usuariorsync se conecta a través de OpenSSH. Esto significa que debes configurar el servidor OpenSSH y las credenciales de inicio de sesión en el destino remoto de antemano. Ten en cuenta que tu_nombre_de_usuario se refiere al nombre de usuario creado en el servidor. Esto podría ser diferente del nombre de usuario que tienes en tu máquina local.
Si posees un nombre de dominio y lo apuntas a la IP de tu servidor, puedes usar el dominio en el comando:
rsync -av /bin [email protected]:/home/tu_nombre_de_usuarioEn transferencias grandes, es útil también comprimir los datos antes de enviarlos por la red agregando el parámetro -z:
rsync -avz /bin [email protected]:/home/tu_nombre_de_usuarioPuedes omitir el parámetro de compresión cuando envías archivos que ya están comprimidos (archivos de audio como MP3, videos, imágenes JPEG). No se pueden comprimir más, así que realmente perderías tiempo usando -z en estos.
Para copiar archivos del destino remoto a tu computadora local, simplemente invierte las ubicaciones:
rsync -avz [email protected]:/bin /home/tu_nombre_de_usuarioConclusión
Esto cubre los comandos más importantes de rsync que necesitas saber. Si alguna vez necesitas más control sobre cómo sincronizar directorios, consulta el manual de rsync en línea y desplázate unas páginas hacia abajo hasta que encuentres “Resumen de Opciones.”