Saltar al contenido
GEEKnodes

macOS · Actualizado el

Cómo sincronizar carpetas en macOS desde Terminal con rsync

Sincroniza carpetas en macOS con rsync: opciones útiles, simulación con --dry-run, --delete sin sustos, exclusiones y openrsync frente a rsync de Homebrew.

Mantener dos carpetas iguales es una necesidad muy habitual: copias de seguridad de documentos a un disco externo, un proyecto que trabajas en dos discos o una carpeta que quieres replicar en un NAS. Hay apps para esto, pero rsync viene con macOS, es rápido porque solo copia lo que ha cambiado y se puede meter en un script.

Antes de empezar

rsync de macOS u openrsync

Desde macOS Sequoia 15.4, el comando rsync del sistema usa openrsync, una reimplementación con licencia BSD, en lugar del antiguo rsync 2.6.9 de Samba que Apple llevaba años sin actualizar. Para el uso de este artículo funciona igual, pero no admite todas las opciones del rsync moderno.

Comprueba cuál tienes:

rsync --version

Si necesitas el rsync actual (opciones como --info=progress2 o scripts que fallan con openrsync), instálalo con Homebrew:

brew install rsync

Queda en /opt/homebrew/bin/rsync en Mac con chip de Apple y en /usr/local/bin/rsync en Mac con Intel. Abre una ventana nueva de Terminal y comprueba con which rsync que se usa esa ruta.

Permisos de disco

Si sincronizas carpetas protegidas (Documentos, Escritorio, discos externos) y ves errores «Operation not permitted», da acceso a Terminal en Ajustes del Sistema > Privacidad y seguridad > Acceso total al disco.

Paso 1: la sincronización básica

rsync -avh --progress ~/Documentos/proyecto/ /Volumes/BACKUP/proyecto/
OpciónQué hace
-aModo archivo: copia recursiva conservando permisos, fechas y enlaces simbólicos
-vMuestra los archivos que copia
-hTamaños legibles (KB, MB, GB)
--progressProgreso de cada archivo
-PEquivale a --progress más --partial (reanuda archivos a medias)

La barra final importa

Es el error más común con rsync:

  • origen/ (con barra) copia el contenido de la carpeta dentro del destino.
  • origen (sin barra) copia la carpeta dentro del destino, creando destino/origen/.
Con barra final, rsync copia el contenido de origen/ dentro de destino/; sin barra, crea destino/origen/.
La barra final decide si se copia el contenido o se anida la carpeta.

Usa siempre la barra en ambos lados si quieres que las dos carpetas queden idénticas.

Paso 2: simular antes de ejecutar

Antes de cualquier sincronización importante, añade -n (--dry-run). Muestra lo que haría sin tocar nada:

La opción -n muestra la sincronización entre carpetas sin modificar origen ni destino.
Con -n puedes revisar la operación antes de que rsync escriba cambios.
rsync -avhn ~/Documentos/proyecto/ /Volumes/BACKUP/proyecto/

Paso 3: espejo exacto con –delete

Por defecto rsync no borra nada en el destino. Si quieres un espejo exacto (lo que borres en el origen se borra en el destino), añade --delete:

Rsync copia los archivos al destino y elimina allí los que ya no existen en el origen.
–delete replica también los borrados; revisa primero la simulación con -n.
rsync -avhn --delete ~/Documentos/proyecto/ /Volumes/BACKUP/proyecto/

Cuidado: con --delete, si te equivocas de orden entre origen y destino o te falta una barra, puedes borrar archivos que solo estaban en el destino. Ejecuta siempre primero con -n, revisa las líneas deleting … y, si todo cuadra, quita la n.

Variantes: --delete-before borra antes de copiar (libera espacio primero) y --delete-after borra al final (más seguro si la copia se interrumpe).

Paso 4: excluir archivos y carpetas

rsync -avh --delete \
  --exclude '.DS_Store' \
  --exclude 'node_modules/' \
  --exclude '*.tmp' \
  ~/Documentos/proyecto/ /Volumes/BACKUP/proyecto/

Fíjate en que las opciones largas llevan dos guiones (--exclude, --delete). Con muchos patrones, ponlos en un archivo, uno por línea, y usa --exclude-from=excluir.txt.

Paso 5: sincronizar con otro equipo por SSH

rsync -avhz ~/Documentos/proyecto/ usuario@192.168.1.50:/home/usuario/proyecto/

-z comprime los datos al transmitirlos: útil por red, inútil entre dos discos locales. El otro equipo necesita tener rsync instalado y SSH activo.

Paso 6: automatizarlo en un script

#!/bin/bash
ORIGEN="$HOME/Documentos/proyecto/"
DESTINO="/Volumes/BACKUP/proyecto/"

if [ ! -d "/Volumes/BACKUP" ]; then
  echo "El disco BACKUP no está conectado"
  exit 1
fi

rsync -ah --delete --exclude '.DS_Store' "$ORIGEN" "$DESTINO"

Guárdalo como sync.sh, dale permisos con chmod +x sync.sh y ejecútalo con ./sync.sh. La comprobación del volumen evita que rsync copie al disco interno si el externo no está montado.

Comprobar que funciona

Lanza la simulación otra vez después de sincronizar:

rsync -avhn --delete ~/Documentos/proyecto/ /Volumes/BACKUP/proyecto/

Si no lista ningún archivo, las dos carpetas son idénticas. Para comparar tamaños rápidamente: du -sh ~/Documentos/proyecto /Volumes/BACKUP/proyecto.

Problemas habituales

Todo se copia cada vez, aunque no haya cambios. Pasa con discos en exFAT o FAT32, que guardan las fechas con menos precisión. Añade --modify-window=2 o formatea el destino en APFS.

«Operation not permitted». Falta el permiso de Acceso total al disco para Terminal (ver Antes de empezar).

Aparece una carpeta dentro de otra (destino/proyecto/proyecto). Te faltó la barra final en el origen.

Una opción da «unknown option» o el script falla tras actualizar macOS. Es openrsync, que no admite esa opción. Instala rsync con Homebrew y llama a su ruta completa en el script.

Los permisos no se copian en discos externos. Si el disco tiene activado «Ignorar propietarios en este volumen» (Obtener información en el Finder), macOS no conserva propietarios. Desactívalo si los necesitas.

Relacionados

Preferencias de accesibilidad

Perfiles rápidos

Texto y lectura

Tamaño del texto
Por defecto
Altura de línea
Por defecto
Espaciado entre letras
Por defecto
Espaciado entre palabras
Por defecto

Color

Movimiento y orientación

Cursor