Los cuatro sitios donde ya podría estar la versión anterior

Antes de instalar nada, mira en los cuatro sitios donde tu Mac puede estar guardando ya el archivo que buscas. Cada uno cubre un caso distinto y estrecho, y averiguar en cuál estás es la mayor parte del trabajo.

Archivo > Volver a, dentro de la propia app. macOS lleva años incluyendo control de versiones de documentos, y una app que lo adopta gana el menú Archivo > Volver a > Explorar todas las versiones, que pone las copias guardadas de ese documento en una línea de tiempo. TextEdit, Vista Previa, Pages, Numbers y Keynote lo tienen. La mayoría de lo que la gente usa de verdad no: ninguna app de Adobe, ninguna de Office, nada que haya escrito un script.

Time Machine. Con "Realizar copias de seguridad automáticamente" activado, macOS toma una instantánea local APFS del disco de arranque aproximadamente cada hora y la guarda 24 horas, más una instantánea de la última copia correcta. Dos límites deciden si eso sirve: la resolución es una hora y no un guardado, y todo lo anterior a un día solo existe si el disco de copia está conectado.

El historial de versiones de tu carpeta en la nube. Dropbox guarda versiones 30 días en Basic y Plus y 180 en Professional. Google Drive guarda una 30 días o hasta que existan 100 más nuevas, salvo que marcaras "Conservar para siempre". iCloud Drive es el raro: sus 30 días de "Eliminados recientemente" recuperan archivos que borraste, no versiones que sobrescribiste. Los tres cubren exactamente una carpeta, la sincronizada.

El autoguardado de la propia app. Merece un vistazo y rara vez merece confianza. Eso es deshacer, y deshacer muere con el proceso.

Si alguno de esos tiene tu archivo, deja de leer. Lo que sigue es para el caso que ninguno cubre: una carpeta que no se sincroniza, editada por una app sin menú de versiones, rota hace más de una hora, o rota en más de un archivo a la vez. Retrace es una app nativa de macOS hecha para ese caso, y todo lo de abajo está en la versión que se descarga.

Activar el historial es un clic derecho

El menú contextual del Finder con el submenú History de Retrace abierto, mostrando Enable History, Disable History, Take a Snapshot Now, Restore Previous Version y Show History
Toda la configuración es un menú contextual. No hay carpeta por omisión, porque adivinar qué carpetas importan es justo el punto en el que una app así se convierte en el problema.

Haces clic derecho en una carpeta en el Finder, eliges History y lo activas. No hay carpeta por omisión, no hay un selector por el que rebuscar, no hay nada más que configurar. Clic derecho otra vez para desactivarlo.

Bajo History hay cinco elementos en tres grupos: activarlo o desactivarlo, actuar sobre lo que pulsaste - capturar esta carpeta, recuperar la versión anterior de este archivo - y abrir la app. Están siempre todos y siempre en ese orden, y lo que no se puede hacer ahora mismo aparece atenuado en lugar de desaparecer. Así el gesto es el mismo todas las veces. Y así el menú dice qué está mirando sin un segundo indicador: la captura solo está activa en una carpeta que espera, y la recuperación solo en un archivo.

Detrás del menú está el único coste real de quedarse dentro del App Sandbox. Una extensión del Finder puede entregar la ruta sobre la que pulsaste y nada más, porque una ruta que llega de otro proceso no es un permiso. Por eso el primer arranque pide una vez tu carpeta de inicio y conserva ese permiso, y a partir de ahí el menú simplemente funciona. Sin él, la misma acción abre un selector de carpetas.

Lo otro que necesita una carpeta vigilada es la prueba de que sigue vigilada. Un permiso con ámbito de seguridad puede dejar de resolverse en silencio - un volumen desaparece, una actualización del sistema invalida un lote de marcadores - y nada en macOS lo avisa: el flujo deja de entregar y ya está. Para una app cuya promesa entera es "esto no lo vas a perder", eso es peor que un fallo. Así que cada carpeta se vuelve a resolver periódicamente con una lectura de prueba real, y la que ha dejado de grabar lo dice en la lista en vez de parecer correcta.

Por qué guardar una copia de todo no cuesta nada

En APFS, copyfile con COPYFILE_CLONE crea un clon de copia en escritura: un archivo nuevo que comparte los bloques de datos del original. Crearlo cuesta unos cero bytes y microsegundos - un clon de 64 MB se mide en unos 0,1 ms y declara cero bytes propios - y sigue siendo una instantánea correcta con las dos formas que tiene una app de guardar. Un editor que reescribe el archivo en el sitio reserva bloques nuevos y le deja los viejos al clon; uno que guarda de forma atómica escribe un archivo entero nuevo al que el clon nunca estuvo unido.

Esa es exactamente la propiedad que le falta a un enlace duro, y por eso el clásico árbol de enlaces duros nunca fue una opción: un enlace duro es el mismo archivo, así que un editor que escribe en el sitio reescribiría en silencio la versión que creías haber guardado.

Como capturar es gratis, Retrace captura de sobra y deja que después un hash del contenido decida si la captura cuenta. Lo que no es gratis es conservar, y un clon se encarece a medida que el original se aleja de él. Por eso la cifra que enseña la app es lo que liberaría de verdad borrar el historial, y no lo que suman las versiones sobre el papel: treinta clones de un archivo de 40 MB son 1,2 GB con la cuenta ingenua y 40 MB en la realidad.

Clonar es una propiedad del volumen y no de la app, y un disco externo en HFS+ o exFAT no puede hacerlo. Retrace lo comprueba antes y rechaza la carpeta, en lugar de convertir cada captura en una copia completa sin decirlo.

Saber cuándo un archivo ha terminado de escribirse

Nada en macOS responde a eso como es debido. La señal que lo haría - el "un proceso acaba de terminar de escribir este archivo" de Endpoint Security - requiere un permiso que concede Apple, es incompatible con el sandbox y no se acepta en la Mac App Store. Tampoco hay forma de preguntar si otro proceso sigue teniendo el archivo abierto.

Así que es una conjetura por capas, y a las capas se les permite equivocarse, porque solo deciden cuándo mirar. Si la mirada cuenta lo decide después el hash. Diez segundos de silencio por archivo reducen a una sola versión la ráfaga de autoguardados de una sesión de edición: diez es el número que usa el propio historial local de VS Code, largo para agrupar una ráfaga y corto para que dos guardados deliberados con un minuto de diferencia sigan siendo dos versiones. Luego una sonda de estabilidad comprueba que el tamaño, la fecha de modificación y el inodo se han quedado quietos; una guarda de longitud cero atrapa a un escritor que trunca a medio vuelo, y una comprobación de cuarentena, a una descarga que aún no ha aterrizado. Guarda un archivo sin cambiarlo y no aparece ninguna versión.

Cuando prefieres decir tú cuándo

El panel de captura de Retrace sobre la app en uso, poniendo nombre al momento antes de guardarlo
El atajo funciona desde dentro de lo que estés usando, y ese es justo el punto: el momento que merece una marca rara vez es uno en el que estabas mirando Retrace.

Guardar cada cambio está bien en una carpeta con una tesis y está mal en una carpeta de renders de ochenta gigabytes, así que el ajuste está en la carpeta y no en la app. Una carpeta a la que le dices que espere sale del flujo de eventos pero mantiene su permiso abierto, de modo que puede recorrerse en el instante en que se lo pides - y todo lo que guarda un recorrido comparte un único instante. Un acto deliberado llega a la línea de tiempo como un momento y no como cuatrocientos.

Hay tres maneras de pedirlo. La propia carpeta tiene un botón de captura, en Cmd-S como un guardado. El submenú History del Finder ofrece Take a Snapshot Now. Y Ctrl-Opt-Cmd-S levanta un panel pequeño sobre la app en la que estés, recoge un nombre para el momento, captura todas las carpetas que esperaban y se quita de en medio. Su pareja, Ctrl-Opt-Cmd-R, abre la ventana del historial: Retrace no tiene icono en la barra de menús ni en el Dock, así que la vuelta adentro es un atajo. Los dos se pueden reasignar en los ajustes y los dos llevan tres modificadores a propósito: a un registro global que pierde una colisión macOS no le dice nada, así que la única defensa de un valor por omisión es ser una combinación a la que nadie más va a echar mano.

La retención nunca adelgaza una captura por su edad. En una carpeta que solo guarda cuando se lo pides, son las únicas versiones que hay.

Distinguir sobrescribir de editar

Un archivo arrastrado sobre otro en el Finder y un archivo guardado por su propio editor son idénticos para cualquier API que ofrece macOS. Los dos dejan un archivo en la ruta, los dos crean un inode nuevo - un guardado atómico renombra un archivo temporal sobre el destino, y el Replace del Finder renombra una copia encima exactamente igual - y los dos llegan como los mismos eventos del sistema de archivos. El evento no dice cuál de los dos ocurrió.

Una cosa los separa: la fecha de modificación del propio archivo. Los bytes escritos en una ruta llevan el momento que el evento reportó; los bytes producidos en otro sitio y movidos allí llevan la fecha que tenían donde se escribieron. La prueba es, entonces, si los bytes son más viejos que el evento que los anunció, con dos minutos de margen, holgadamente por encima de lo que un archivo grande puede tardar legítimamente antes de ser capturado.

Eso atrapa un replace del Finder, un descomprimido que cae sobre un documento, cp -p, rsync, una sincronización que escribe la copia del servidor y una restauración desde una copia de seguridad. No atrapa cp sin -p ni una descarga del navegador, que sellan la hora actual, y se deja así a propósito: cualquier alternativa - hashear los bytes anteriores, comparar contenidos, olfatear formatos

  • cuesta órdenes de magnitud más y se equivoca a su manera. Para una marca que decide qué se conserva, quedarse corto es el fallo correcto.

También tiene un efecto sobre la ventana de diez segundos: un archivo colocado no la espera. La ventana existe para plegar la ráfaga de autoguardados de un archivo en una sola versión, y una caída no es una ráfaga: retenerla ahí es justo lo que permite que una segunda caiga sobre la primera y las dos queden archivadas como una.

Lo que ves: la lista de carpetas marca en cada una cuántos de sus archivos han recibido algo encima, la lista de archivos marca esas filas y lleva un interruptor que la reduce a ellas, y en la línea de tiempo el momento dice que el archivo fue reemplazado y no editado. De ahí en adelante lo toma la retención: la versión de debajo de un reemplazo se guarda treinta días por mucho que se recorte lo demás, porque un documento escrito hace un año y enterrado esta mañana es justo la copia por la que alguien abre esta app.

Rebobinar la carpeta, y deshacer el rebobinado

El historial de una carpeta en Retrace como línea de tiempo agrupada por días, con cada momento listando los archivos que cambiaron
Los instantes se vuelven momentos y los momentos sesiones, y cada uno dice qué cambió y no solo cuándo.

Una carpeta activa produce cientos de instantes de captura al día incluso después de que la ventana de fusión haya hecho su trabajo, así que la línea de tiempo los pliega. Los instantes separados por menos de un minuto son un momento - guardar cuatro documentos en el mismo medio minuto es una cosa que hiciste, no cuatro - y los momentos separados por más de 45 minutos abren una sesión nueva. Cada momento lista los archivos que cambiaron en él.

Rebobinar lleva la carpeta entera a uno de esos momentos. Cada ruta se revisa antes de tocar nada, porque un plan permitido a medias y rechazado a medias no debe ejecutarse: pediste un estado, no la mayor parte de un estado. Después se captura el estado actual de todo lo que el rebobinado va a tocar, y ese paso es la respuesta entera a "y ahora devuélveme al presente".

Las dos mitades de eso quedan en la línea de tiempo. El acto tiene una fila propia que dice adónde fue - "volviste a las 13:15" - y el estado que dejaste recibe un punto justo antes; ninguno de los dos se pliega dentro del trabajo que lo rodea. Cuando el rebobinado termina, el camino de vuelta ya está seleccionado y con su plan hecho, así que "tampoco era este" es una sola pulsación, y sigue ahí cuando la banda ha desaparecido o la app se ha reiniciado. Deshacer no es aquí un mecanismo aparte, es rebobinar hasta ese punto, y eso se deshace igual que cualquier otra cosa de la línea de tiempo. La fila cuyo estado tiene la carpeta ahora mismo se dibuja distinta en vez de etiquetarse, así que dónde estás es algo que se ve y no que se deduce, y el primer guardado posterior la mueve hacia delante con la carpeta.

Los archivos que el rebobinado retira van a la Papelera en vez de borrarse, y también las carpetas que sus propias retiradas dejaron vacías, de la más honda hacia fuera, de modo que un árbol creado después del destino se recoge entero - una que aún guarde algo que Retrace nunca capturó se queda donde está, porque un rebobinado nunca debe llevarse lo que no podría devolver. Un archivo que no se pueda escribir no aborta el resto: los fallos se recogen y se nombran en el informe. Un rebobinado que hizo en silencio once de doce cosas es peor que uno que lo dice.

Devolver un solo archivo, después de ver qué cambió

Dos versiones de un documento comparadas lado a lado en Retrace, con las líneas cambiadas marcadas
El texto se compara línea a línea, las imágenes con un deslizador o una diferencia amplificada, y un PDF simplemente dice qué páginas se movieron.

La mayoría de los rescates son de un archivo, y para eso la carpeta es la unidad equivocada. Cada fila dice cuántas versiones guarda y cuándo cambió por última vez, y al hacer clic derecho se llega al archivo en sí: mostrar en el Finder, o abrir. Una versión suelta se puede devolver en el sitio, o escribir al lado del original como hermano numerado si prefieres compararlas primero. Devolverla en el sitio captura antes el archivo actual como versión, y eso es lo que hace que el botón se pueda pulsar; la versión que el archivo ya tiene no se ofrece siquiera, lo dice en su lugar.

La comparación va por formato, porque "qué cambió" tiene una respuesta útil distinta en cada uno. El texto se compara línea a línea. Las imágenes tienen un divisor deslizante, un fundido de piel de cebolla y un modo de diferencia que amplifica y colorea el resultado, porque la mezcla de diferencia en bruto de dos imágenes casi iguales es un cuadro negro con un punto dentro. Un PDF se compara con el hash del texto de cada página, lo que sobrevive al reordenamiento de objetos que produce cada exportación - una comparación byte a byte diría que ha cambiado el archivo entero - y responde en la resolución por la que pregunta la gente: "las páginas 3 y 7".

Lo que no hace a propósito

No es una copia de seguridad. El historial vive en el mismo disco que la carpeta, así que un disco averiado se lleva los dos. Ese es el intercambio deliberado por capturar segundos después de guardar en lugar de una vez por hora, y por eso Time Machine o una copia fuera de casa siguen siendo la otra mitad.

No hay sincronización, ni app para el iPhone, ni cuenta, y funciona con la red apagada. Los archivos que solo están en la nube se omiten en vez de descargarse, para que activar el historial en una carpeta llena de marcadores de posición no arrastre gigabytes de vuelta al disco sin avisar.

Algunos árboles quedan fuera por omisión: node_modules, DerivedData y .build porque se regeneran, .git y .svn porque ya son un historial de versiones, y las fototecas y videotecas porque son bases de datos de varios gigabytes que se reescriben sin parar. Cada valor por omisión es visible y editable, porque lo único peor que una exclusión mala es una invisible.

El historial no crece para siempre, adelgaza con la edad: todo lo de las últimas 24 horas, una semana por horas, un mes por días, un año por semanas, y encima una lista que nunca se borra: las diez versiones más nuevas de cada archivo, todo lo marcado, la última versión de un archivo que ya no existe, lo que una sobrescritura reemplazó durante los treinta días siguientes, y el camino de vuelta de un rebobinado durante otros treinta. Un momento al que pones nombre se guarda para siempre, y ponerle nombre nunca borra lo que un rebobinado escribió ahí. Cada carpeta tiene un presupuesto de disco contra el que se jubilan las versiones viejas.

Qué cuesta y qué más mirar

Retrace necesita macOS 14 o posterior, funciona en Apple Silicon e Intel y ocupa unos 25 MB. Es una compra única de 8,99 dólares con una prueba de 14 días que no pide tarjeta ni correo. La ficha completa está en la página de Retrace.

Si la pregunta de fondo es qué capa de copia de seguridad te falta en realidad, hay un repaso en alternativas a Time Machine para Mac: historial de versiones y copia de seguridad son trabajos distintos y casi todo el mundo necesita los dos. Y si el problema real es que el disco está demasiado lleno para cualquiera de ellos, el vecino es Sweep: ordena una carpeta con reglas que tú escribes, en ordenar archivos automáticamente en un Mac, y el espacio que libera está en liberar espacio en disco en un Mac.