Watch at EaseHistorias. Respuestas. Perspectiva.

Tecnología · GUÍA PRÁCTICA

Conserva solo las últimas versiones de File History en Linux

Crea en Linux una copia que contenga solo las últimas versiones de una carpeta legible de File History de Windows, eligiendo por las marcas de tiempo UTC guardadas y manteniendo separados los distintos archivos.

Ilustración editorial original que muestra tres versiones guardadas de Work/report.pdf: se selecciona la marca de tiempo UTC más reciente del nombre para crear una copia independiente llamada Work/report.pdf con la opción --restore-names.
Ilustración editorial original: se selecciona la última de tres versiones guardadas. La salida mostrada utiliza la opción --restore-names; de forma predeterminada, la salida conserva la marca de tiempo UTC en el nombre. Todas las versiones de origen permanecen en la copia de seguridad. Watch at Ease

Una carpeta de File History de Windows puede contener varias copias guardadas del mismo documento, cada una con una marca de tiempo UTC añadida al nombre. Para conservar la última copia de cada archivo, agrupa las versiones por su directorio original y su nombre completo y, después, compara esas marcas de tiempo. El orden en que Linux enumera los archivos no es un sustituto fiable.

La herramienta que se presenta a continuación crea una copia independiente que contiene solo las últimas versiones. No reescribe ni elimina archivos del origen, y su vista previa predeterminada no crea archivos de salida. Al aplicar la selección, copia los archivos elegidos a un directorio de salida nuevo; no elimina las versiones anteriores de la copia de seguridad ni libera el espacio que ocupan.

Comprueba qué tienes realmente

Empieza por una carpeta legible que contenga los propios archivos guardados. Un ejemplo compatible es Report (2024_05_03 09_30_00 UTC).docx. Otro archivo posterior llamado Report (2024_05_08 16_15_00 UTC).docx, situado en el mismo directorio, pertenece al mismo grupo. Indica a la herramienta el subárbol que quieres procesar, sin dar por hecho que cualquier carpeta llamada FileHistory contiene archivos con este patrón visible de nombres.

Conserva intacta la copia de seguridad original. Examina varios archivos y confirma que se abren antes de procesar un árbol de directorios grande. Si no se puede montar el disco, no se pueden leer los archivos o sus nombres son identificadores opacos, esta herramienta no es el siguiente paso de recuperación. No puede reconstruir las rutas originales a partir de un catálogo de File History ni recuperar contenido que falta.

No combines en una sola carpeta copias de seguridad de distintos usuarios o equipos solo porque los nombres se parecen. Elige el subárbol legible que corresponde, conserva sus directorios y procesa por separado cualquier otra copia de seguridad. Nada de este procedimiento demuestra que dos documentos con el mismo nombre procedentes de copias de seguridad diferentes sean el mismo archivo original.

Entiende qué versión se seleccionará

Dentro de un mismo directorio, la herramienta compara las marcas de tiempo UTC interpretadas a partir de los nombres de las versiones de un mismo archivo original, tomando su nombre completo. Report.docx y Report.pdf pertenecen a grupos distintos. Documents/Report.docx y Archive/Report.docx también pertenecen a grupos distintos. La extensión y el directorio forman parte de la identidad del archivo.

Copiar archivos a otro disco puede cambiar sus marcas de tiempo en el sistema de archivos. Esas marcas no determinan la selección. Tampoco la determina la versión que aparezca en último lugar al recorrer un directorio: la documentación de Python indica que las listas obtenidas al recorrer directorios no están necesariamente ordenadas. El resultado buscado es el mayor valor UTC guardado que esté presente en cada grupo compatible.

Descarga la herramienta y elige las rutas

Abre una terminal en Linux y comprueba tu versión de Python:

python3 --version

Utiliza Python 3.10 o posterior. Guarda filehistory-latest-v1.py en una carpeta de trabajo y abre la terminal en esa carpeta. Si tienes curl instalado, puedes descargar el archivo de código fuente con el siguiente comando. Este comando guarda el script; no lo ejecuta.

curl --fail --location "https://watchatease.com/guide-tools/filehistory-latest-v1.py" --output "filehistory-latest-v1.py"

En los ejemplos siguientes, FileHistory-copy/Documents es el subárbol de origen y latest-documents es una carpeta de salida nueva situada junto a FileHistory-copy. Sustituye el origen por su ruta real. Mantén las comillas alrededor de las rutas que contengan espacios. El directorio de salida no debe existir y las rutas de origen y salida no deben solaparse: no sitúes la salida dentro del origen.

Revisa la selección antes de copiar

Pausa cualquier tarea de copia de seguridad que escriba en este subárbol de origen y evita modificar sus archivos desde la vista previa hasta que termine la copia. El proceso no captura todos los archivos en un mismo instante. Ejecuta primero el comando sin --apply:

python3 "filehistory-latest-v1.py" --source "./FileHistory-copy/Documents" --output "./latest-documents"

La herramienta muestra una vista previa en JSON en la terminal sin crear el directorio de salida. No lee el contenido de los archivos ni calcula sus hashes, por lo que una vista previa correcta no garantiza que después se puedan copiar todos los archivos. Revisa las rutas y la información de selección antes de continuar. Comprueba un archivo conocido con varias versiones guardadas, dos archivos con el mismo nombre base pero distintas extensiones y cualquier archivo con el mismo nombre situado en directorios diferentes.

Los archivos normales que no coinciden con el patrón de marca de tiempo admitido se indican como omitidos. No se copian al resultado que contiene solo las últimas versiones. Un archivo omitido puede seguir siendo importante para ti, así que revisa esas entradas y conserva o copia esos archivos por separado según corresponda; no consideres el resultado una copia de todo lo que hay bajo el directorio de origen.

Una marca de tiempo UTC no válida, un enlace simbólico, un archivo especial o un error de lectura bloquean la ejecución. Un empate ambiguo en la marca de tiempo más reciente también requiere revisión. Investiga la ruta indicada en lugar de cambiar una fecha que no reconoces para que pase la comprobación o de elegir arbitrariamente uno de los archivos empatados. Una ejecución sin archivos compatibles también se bloquea: comprueba que has seleccionado el subárbol de datos que contiene los archivos con marcas de tiempo.

Copia las últimas versiones a un directorio nuevo

Cuando la vista previa describa los archivos que quieres reunir, repite el mismo comando con --apply:

python3 "filehistory-latest-v1.py" --source "./FileHistory-copy/Documents" --output "./latest-documents" --apply

La salida contiene un directorio files, manifest.csv y summary.json. Los archivos seleccionados conservan su estructura de directorios relativos. De forma predeterminada también conservan los nombres guardados con sus marcas de tiempo, lo que permite ver qué versión se ha elegido. La copia de seguridad original sigue conteniendo sus versiones anteriores. La herramienta copia el contenido de los archivos, no sus permisos, ACL ni marcas de tiempo originales del sistema de archivos.

Si prefieres que el resultado tenga los nombres originales, añade --restore-names. Esta opción solo facilita la asignación de nombres; no cambia qué marca de tiempo se selecciona. Revisa esa opción con otra ruta de salida sin usar antes de aplicarla:

python3 "filehistory-latest-v1.py" --source "./FileHistory-copy/Documents" --output "./latest-documents-original-names" --restore-names

python3 "filehistory-latest-v1.py" --source "./FileHistory-copy/Documents" --output "./latest-documents-original-names" --restore-names --apply

Comprueba el resultado antes de confiar en él

Lee summary.json y examina manifest.csv con un editor de texto o un visor de hojas de cálculo. Una copia terminada tiene el valor complete en status y no contiene el marcador _INCOMPLETE.txt. En el manifiesto, utiliza source_relative_path y output_relative_path para seguir la correspondencia de cada archivo copiado, version_utc para revisar la fecha seleccionada y sha256 para ver el hash de contenido registrado. Contrasta las entradas copied, older_version y unmatched con los totales y con cualquier error indicado.

La herramienta comprueba el contenido de los archivos copiados mediante hashes SHA-256. Un hash coincidente respalda que los bytes copiados coinciden con los del archivo de origen seleccionado. No demuestra que ese archivo seleccionado fuera un original completo o en buen estado, ni que la copia de seguridad incluyera todos los documentos que esperabas.

Abre varios documentos, imágenes u otros archivos de salida en sus aplicaciones habituales. Incluye un archivo importante, otro con varias versiones y archivos de directorios distintos. Compara la marca de tiempo elegida para un grupo conocido con las versiones disponibles en el origen. Si falta algo o encuentras un resultado inesperado, vuelve a revisar la vista previa y los archivos de origen antes de dar el resultado por completo.

Si tu objetivo era recuperar espacio en disco, recuerda que este proceso no ha limpiado la copia de seguridad original. Verifica primero la copia que contiene solo las últimas versiones y, después, decide por separado si conservarás la copia de seguridad y sus versiones anteriores. Esas versiones pueden resultar útiles más adelante; no las elimines solo porque se haya creado una carpeta nueva.

Si el comando no termina

Si Python no encuentra el script, comprueba la carpeta actual de la terminal o indica la ruta completa del script. Si no encuentra el origen, utiliza la ubicación donde está montada realmente la copia de seguridad legible. Una letra de unidad de Windows no es automáticamente una ruta utilizable en Linux.

Si la salida ya existe, elige otro directorio de salida sin usar. No dirijas otra ejecución a un resultado que ya contiene archivos esperando que lo actualice o lo combine. Conserva las opciones de la vista previa al aplicar la selección, incluida --restore-names si la elegiste. Si restaurar los nombres haría que un archivo entrara en conflicto con un directorio, revisa esa estructura o utiliza los nombres de salida predeterminados con marcas de tiempo.

Un fallo de la vista previa o de las comprobaciones previas devuelve un error sin crear el directorio de salida. Un fallo durante la copia puede dejar una salida parcial con _INCOMPLETE.txt y un resumen con el estado failed o in_progress. Si también falla la escritura de los informes, pueden faltar summary.json o manifest.csv. Considera fallida una ejecución que muestre un error en la terminal, un marcador de copia incompleta o que no tenga pruebas de finalización. Corrige la causa indicada, revisa de nuevo la vista previa y aplica la selección a otro directorio de salida nuevo.

Mantén separado el directorio incompleto mientras investigas; la herramienta no lo elimina automáticamente. No mezcles sus archivos con los de una ejecución posterior y des por verificada esa mezcla. Utiliza el manifiesto y el resumen de una única ejecución terminada y, después, abre y revisa sus archivos antes de decidir qué conservar.

Qué no te dice una colección con las últimas versiones

Cada grupo aporta su última versión guardada disponible, y esas versiones pueden corresponder a fechas distintas. Por tanto, la colección no es una instantánea del equipo en un momento concreto. Un archivo eliminado del equipo original puede conservar una copia guardada en la copia de seguridad y aparecer en este resultado.

Las versiones anteriores que faltan, los nombres que no coinciden con el patrón admitido, la información que solo existe en el catálogo y las rutas almacenadas de forma opaca quedan fuera de este proceso de selección. La herramienta no deduce el historial de eliminaciones, no reconstruye esas rutas ni decide que un archivo no reconocido sea prescindible.

Si puedes utilizar Windows y necesitas la restauración por fechas de File History, Microsoft documenta esa opción nativa. Otra alternativa existente, WindowsFileHistoryCleaner, ya ofrece selección de la última versión y un modo de vista previa. Mono admite una parte amplia de .NET, pero esta guía no afirma haber verificado la configuración de ese proyecto concreto en Linux. El procedimiento que se explica aquí se limita deliberadamente a los archivos legibles con marcas de tiempo descritos anteriormente.

Ilustración editorial original que muestra Work/report.txt, Work/report.pdf y Home/report.txt como tres grupos de versiones distintos, cada uno con su propia copia más reciente y con la opción --restore-names.
Ilustración editorial original: se agrupa por directorio relativo y nombre original completo, incluida la extensión. Las copias mostradas utilizan la opción --restore-names; de forma predeterminada, la salida conserva los nombres seleccionados con sus marcas de tiempo UTC. Watch at Ease