rsyncEl comando: rsync -aE --delete ~/Documents/ /Volumes/Backup/Documents/
-E es la parte específica de macOS, y si la omites pierdes sin avisar los atributos extendidos y los resource forks.
-a es el modo archivo: recorre subcarpetas y conserva permisos, propietario, fechas y enlaces simbólicos. Es la opción que todo el mundo conoce.-E conserva los atributos extendidos y los resource forks de macOS. Ahí viven las etiquetas de Finder, las marcas de cuarentena, los iconos personalizados y buena parte de los metadatos de las aplicaciones. Sin él desaparecen, y nada te avisa.--delete elimina archivos del destino cuando ya no están en el origen. Es lo que convierte la copia en un espejo, y es la opción en la que más hay que pensar.-v para ver la salida, -n para una prueba en seco. Haz siempre una prueba en seco la primera vez con un comando que lleve --delete.~/Documents copia la carpeta dentro del destino, y te deja /Volumes/Backup/Documents/Documents. ~/Documents/ copia su contenido, que es casi siempre lo que querías. En un comando que además lleva --delete, equivocarte borra todo lo demás que hubiera en el destino.--exclude para lo que no vale la pena copiar: --exclude '.DS_Store', --exclude 'node_modules', --exclude 'Library/Caches'.macOS incluye una versión de rsync que basta para esto. Si quieres la más reciente del proyecto original, Homebrew la tiene, y gestiona mejor las ACL en macOS.
rsync hace que el destino se parezca al origen. Eso es una copia, y una copia no es historial. Un documento que borraste el martes pasado desaparece de la copia la próxima vez que se ejecuta. Lo mismo pasa con la versión buena de un archivo que has sobrescrito después, y con todo lo que el ransomware tocó antes de que saltara la tarea.
Quitar --delete no lo arregla. Te deja un destino que acumula todos los archivos que has tenido, todavía con una sola versión de cada uno, y sin forma de saber cuál es el actual.
--link-destEl truco habitual es crear un directorio nuevo con fecha en cada ejecución y enlazar con enlaces duros los archivos sin cambios al anterior, para que los archivos idénticos no ocupen nada:
DEST=/Volumes/Backup
TODAY=$(date +%F)
rsync -aE --delete \
--link-dest="$DEST/latest" \
~/Documents "$DEST/$TODAY"
ln -snf "$DEST/$TODAY" "$DEST/latest"
Ahora cada carpeta con fecha parece una copia completa y solo ocupan espacio los archivos cambiados. Es más o menos la idea en la que se basa Time Machine.
Dos salvedades. Los enlaces duros hacen que las copias no sean independientes: un daño en el bloque subyacente afecta a todas las instantáneas que lo comparten. Y necesita un sistema de archivos con enlaces duros, así que funciona en un disco externo y no dentro de la mayoría de las carpetas en la nube.
rsync no cifra nada en reposo. Si el destino es una carpeta en la nube o un disco que sale del edificio, cifra antes de escribir:
tar -cJf - ~/Documents | openssl enc -aes-256-cbc -pbkdf2 -out /Volumes/Backup/documents.tar.xz.enc
Eso es un único archivo opaco: sin copia incremental, sin restaurar un solo archivo sin desempaquetarlo todo, y con una sola frase de contraseña entre tú y todo lo demás. Esa contrapartida importa, y es el momento en que la mayoría deja de hacérselo a mano.
cron sigue existiendo en macOS, pero launchd es la vía admitida. Un plist en ~/Library/LaunchAgents/ con un StartCalendarInterval ejecuta tu script a diario. macOS pedirá Acceso total al disco para lo que lo ejecute, porque leer Documentos y Escritorio está protegido.
Programes lo que programes, haz que escriba su resultado en algún sitio que de verdad vayas a ver, y comprueba que la copia es reciente:
find /Volumes/Backup -type f -newermt '-7 days' | head
Una tarea silenciosa es el modo de fallo. No se detiene con un error en pantalla: se detiene de noche hace cuatro meses.
Los comandos de arriba cubren la copia. Lo que no cubren es lo que de verdad quieres el día que algo sale mal: versiones que sobreviven a una pasada del espejo, cifrado que aún te deja restaurar un solo archivo, una relectura que compruebe cada pieza con su hash y algo que te avise cuando el disco lleva una semana sin aparecer.
Cada una de esas cosas es un fin de semana de scripts, y luego te toca mantenerlas. Copy Shelter es la misma idea con esas partes incluidas, y es gratis para una ubicación.
rsync pierde las etiquetas de Finder?Porque -a por sí solo no copia los atributos extendidos en macOS. Añade -E. Si también necesitas ACL, usa -A, y plantéate la versión de Homebrew, que los gestiona mejor que la del sistema.
Sí, a una carpeta compartida montada en /Volumes o por SSH al propio NAS. Por SSH es más rápido y no depende de que el montaje esté presente, y muchos NAS traen rsync integrado.
sudo?No para tu propia carpeta personal. Sí tienes que dar Acceso total al disco a Terminal, o a lo que ejecute launchd, para que macOS le deje leer Documentos, Escritorio y Descargas.
--delete?Hace exactamente lo que le pides, y esa es la parte peligrosa. Haz una prueba en seco con -n la primera vez y asegúrate de que la ruta de destino es correcta: una errata con --delete apuntando al directorio equivocado borra los archivos de ahí.
Sí, para eso está rsync. Vuelve a ejecutarlo y solo transfiere lo que falta o ha cambiado. Añade --partial para que un archivo grande a medio transferir se conserve y se reanude.
Siguiente: cómo comprobar que la copia se puede leer de verdad.