Sincronizar 2 carpetas en macOS con rsync

Rsync es una herramienta para sincronizar el contenido de 2 carpetas diferentes. Funciona en modo local y en modo remoto. Fue lanzada en junio de 1996. Está disponible como software libre bajo la licencia GNU General Public License.

Utilizar rsync para sincronizar 2 carpetas diferentes

Existen muchos programas con interfaz gráfica para sincronizar 2 carpetas pero en ocasiones puede resultar más sencillo utilizar Terminal y comandos que ya existen en macOS sin tener que instalar ningún otro programa. El uso de rsync es lo suficientemente sencillo para tenerlo en cuenta.

El comando básico para sincronizar 2 carpetas que pueden estar en el mismo disco o en disco distintos o incluso en 2 ordenadores conectados es:

rsync -avP /Ruta-a-la-carpeta-origen/ /Ruta-a-la-carpeta-destino

Observa que origen termina en / pero destino no. Las opciones de este comando son:

  • a: modo archive, esta opción es la más habitual ya que copia archivos y directorios recursivamente y preserva enlaces, permisos y fechas de cada elemento
  • v: modo verbose, muestra información detallada de lo que se va ejecutando
  • P: mantiene los datos parcialmente transferidos hasta su transferencia completa y muestra información del progreso.

Una opción muy útil que mejora la sincronización es delete que borra en destino archivos y carpetas que ya no existen en origen. Esta opción se suele escribir al final del comando básico y tiene 2 variantes dependiendo de si los datos se borran antes o después de la transferencia:

  • –delete-before: los elementos que no existen en origen se borran en destino antes de (no durante) la trasferencia. Es decir: rsync borra en destino los elementos que no existen en origen > rsync transfiere los datos.
  • –delete-after: los elementos que no existen en origen se borran en destino después de (no durante) la trasferencia. Es decir: rsync transfiere los datos > rsync borra en destino los elementos que no existen en origen.

El comando básico completo quedaría así (con la variante before / after):

rsync -avP /Ruta-a-la-carpeta-origen/ /Ruta-a-la-carpeta-destino --delete-before

rsync -avP /Ruta-a-la-carpeta-origen/ /Ruta-a-la-carpeta-destino --delete-after

A medida que se van copiando los elementos, rsync va mostrando el nº de elementos transferidos, restantes y el total. Con este simple comando sincronizo carpetas de forma habitual sin fallos o interrupciones en la copia.

Versión de rsync en macOS 10.13 High Sierra

High Sierra viene con una versión antigua de rsync, 2.6.9 que data de 2006, se comprueba con el comando rsync –version:

rsync  version 2.6.9  protocol version 29
Copyright (C) 1996-2006 by Andrew Tridgell, Wayne Davison, and others.

En macOS por defecto está instalada en la carpeta /usr/bin/rsync y las páginas man en /usr/share/man/man1/rsync.1.gz y /usr/share/man/man5/rsyncd.conf.5.gz. Puedes instalar una versión más moderna de rsync (actualmente es la 3.1.3) desde el código fuente con estos comandos de Terminal ejecutados en la carpeta descargada y descomprimida:

./configure
make
sudo make install

Si no tienes instalada la herramienta yodl2man (permite generar o instalar las páginas mande ayuda) al terminar la configuración obtienes este aviso:

rsync 3.1.3 configuration successful
Note that yodl2man was not found, so pre-existing manpage files
will be used w/o change (if available).

Puedes continuar porque lo único que va a pasar es que se conservarán las páginas man de la versión anterior y no se instalarán las nuevas. Al terminar el proceso obtienes rsync 3.1.3 en /usr/local en lugar de /usr. Se comprueba que está bien instalada con el comando rsync –version:

rsync  version 3.1.3  protocol version 31
Copyright (C) 1996-2018 by Andrew Tridgell, Wayne Davison, and others.

Chris1111 ofrece un paquete instalador con la versión más reciente de rsync. Este paquete requiere para funcionar que tanto SIP como Gatekeeper estén desactivados.

Para no tener simultáneamente las 2 versiones en el sistema independientemente del método de instalación elegido, puedes borrar la 2.6.9 y quedarte sólo con la 3.1.3. Para ello ejecuta este comando en Terminal antes o después de instalar la versión nueva:

sudo rm /usr/bin/rsync /usr/share/man/man1/rsync.1.gz /usr/share/man/man5/rsyncd.conf.5.gz