Sincronización de archivos con el comando Rsync

Rsync es una herramienta genial que se encuentra disponible en la mayoría de las distribuciones Linux, Unix y Mac, y que permite realizar copias incrementales y diferenciales de archivos.

Particularmente en la mayoría de los casos solo la he usado para mantener sincronizados y actualizados los archivos de respaldo creados a partir de sus originales en una ubicación diferente, pero es una herramienta muy potente que permite realizar muchísimas otras cosas más avanzadas e interesantes.

Algunos usos prácticos que le he dado a la herramienta son copiar solo los archivos nuevos o modificados entre directorios locales y también entre equipos remotos, además lo he usado para mantener actualizado un mirror local privado generado a partir de un repositorio público de openSUSE. A continuación van los ejemplos de uso práctico.

Usos prácticos

  • Podemos sincronizar los archivos existentes en una carpeta a otra de nuestro equipo mediante el comando rsync de la siguiente manera:
    usuario@testsrv:~> rsync -auv /home/miusuario/nuevos-archivos /home/miusuario/tmp
  • Algo que suelo usar mucho a la hora de mantener sincronizados dos directorios es utilizar el argumento --exclude para evitar que se sincronicen los directorios y archivos ocultos, y en ciertas ocasiones para evitar que se incluyan los archivos con una extensión en particular:
    usuario@testsrv:~> rsync -auv --exclude ".*" /home/miusuario/nuevos-archivos /home/miusuario/tmp
    usuario@testsrv:~> rsync -auv --exclude "*.jpg" /home/miusuario/nuevos-archivos /home/miusuario/tmp

  • Al argumento --exclude también se le pueden pasar nombres de carpetas y nombres de archivos específicos:
    usuario@testsrv:~> rsync -auv --exclude "archivo.txt" /home/miusuario/nuevos-archivos /home/miusuario/tmp
    usuario@testsrv:~> rsync -auv --exclude "nombre_carpeta" /home/miusuario/nuevos-archivos /home/miusuario/tmp

  • Tampoco hay problemas para agregar más de un argumento --exclude al comando rsync como se puede observar a continuación:
    usuario@testsrv:~> rsync -auv --exclude ".*" --exclude "*.jpg" --exclude "archivo.txt" --exclude "nombre_carpeta" /home/miusuario/nuevos-archivos /home/miusuario/tmp
  • Podemos sincronizar el contenido de un directorio de origen a un directorio de destino ubicado en un equipo remoto a través del protocolo SSH de la siguiente forma:
    usuario@testsrv:~> rsync -t -e ssh -Pazv /home/miusuario/nuevos-archivos usuario@ip_o_dominio_equipo:/ruta/carpeta/destino
    El comando anterior se encargará de hacer algo parecido a lo que hace el comando SCP pero solo copiará/sincronizará al otro equipo aquellos archivos que hayan sido modificados o aquellos que hayan sido agregados recientemente y que aún no existan en el equipo remoto.

    Ahora bien, el comando anterior requerirá introducir la contraseña del usuario remoto cada vez que lo ejecutemos a menos que hayamos configurado una autenticación SSH mediante llaves públicas y privadas como ya hemos visto en éste artículo.

  • O como hemos visto en ésta entrada sincronizar los archivos de un mirror o repositorio remoto a un directorio local de nuestro equipo:
    testsrv:~ # rsync --times --perms --recursive --links --verbose --progress mirrors.nl.eu.kernel.org::opensuse/update/12.3/ /opt/opensuse/12.3/repo/update/ --delete-after --human-readable --itemize-changes --stats --exclude=x86_64
Para conocer los argumentos soportados por el comando rsync les recomiendo leer su man page, la lista es bastante extensa y sus funcionalidades están bien detalladas.


Enlaces

Comentarios