Elimine todas las copias de seguridad de un archivo/carpeta específico con tmutil

Estoy tratando de eliminar todas las copias de seguridad de elementos específicos a través de la línea de comandos. Puedo lograr esto usando la GUI a través de los siguientes pasos:

  1. Entra en la máquina del tiempo
  2. Navegue hasta el archivo que desea eliminar
  3. Haga clic con el botón derecho (o haga clic en el ícono de ajustes en el buscador) y elija "Eliminar todas las copias de seguridad de..."

¿ Cómo puedo replicar esto en la línea de comando usando tmutil? Especialmente, al usar Backup Loupe para detectar archivos grandes, sería más fácil usar la Terminal (ya que no tengo que ingresar a TimeMachine cada vez que quiero eliminar un archivo en particular y puedo navegar hasta él usando el Finder, y luego colóquelo en la Terminal para obtener un comando para eliminarlo).

Esperaba poder usar algo como esto:

sudo tmutil delete /path/to/file

sin embargo me da el error:

"Objetivo de eliminación no válido (error 22)"`

Esto funciona bien:

sudo tmutil delete /Volume/Backups.backupdb/<machinename>

y esto también:

sudo tmutil delete /Volume/Backups.backupdb/<machinename>/<specificbackup>

De acuerdo con man tmutilel deletecomando, también debería poder eliminar elementos específicos. Sin embargo, no he tenido suerte hasta ahora. Si bien hay numerosas respuestas en este sitio (y en otros lugares) para eliminar copias de seguridad específicas y tmutilpara eliminar elementos de copia de seguridad específicos a través de la GUI (usando el método descrito anteriormente), no pude encontrar ninguna forma que no sea GUI para eliminar elementos de copia de seguridad específicos .

@stephenwade Veo que agregaste una recompensa a esta pregunta, gracias :) ¿Se supone que ahora debo aceptar una respuesta o se supone que debes darle la recompensa a alguien? No tengo claro cómo funcionan las recompensas por las preguntas de otros.
Puede aceptar (o no aceptar) la respuesta que desee, sin impacto en la recompensa.

Respuestas (2)

Encontré estas preguntas y respuestas de SU tituladas: ¿Cómo puedo eliminar archivos de Time Machine usando la línea de comandos que demuestra un método para eliminar archivos específicos de la CLI? Esta respuesta destacó un método que suena como lo que quieres:

Mi disco de respaldo está lleno. Tengo un archivo muy grande (muchos gigabytes) del que se ha realizado una copia de seguridad durante meses. Hay una copia física, pero muchas instantáneas con enlaces físicos a esa copia. Para deshacerme realmente de ese archivo, necesito eliminar el enlace duro de cada copia de seguridad.

En esa respuesta, se mostró que uno podría usar este método para eliminar un archivo:

$ cd /Volumes/WD\ 500G\ USB/Backups.backupdb/csm-laptop
$ ls -li */Macintosh\ HD/Users/csm/vm.img
...
2740350 -rw-r--r--@ 28 csm  staff  42949672960 Feb 17 16:12 2015-05-08-005636/Macintosh HD/Users/csm/vm.img
2740350 -rw-r--r--@ 28 csm  staff  42949672960 Feb 17 16:12 2015-05-08-015812/Macintosh HD/Users/csm/vm.img
2740350 -rw-r--r--@ 28 csm  staff  42949672960 Feb 17 16:12 2015-05-08-030036/Macintosh HD/Users/csm/vm.img
2740350 -rw-r--r--@ 28 csm  staff  42949672960 Feb 17 16:12 2015-05-08-041307/Macintosh HD/Users/csm/vm.img
2740350 -rw-r--r--@ 28 csm  staff  42949672960 Feb 17 16:12 Latest/Macintosh HD/Users/csm/vm.img

El método para eliminar el archivo utiliza una herramienta CLI auxiliar incluida con Time Machine llamada bypass:

$ sudo bypass rm -f */Macintosh\ HD/Users/csm/vm.img

ubicación de la derivación

Dado que bypassse considera una secuencia de comandos de ayuda para Time Machine, su ubicación no suele estar en su archivo $PATH. Por lo tanto, deberá especificar la ruta completa al ejecutable. Además, Apple lo ha reubicado para diferentes versiones de macOS.

$ sudo /System/Library/Extensions/TMSafetyNet.kext/Contents/MacOS/bypass \
    rm -rfv /Volumes/[disk]/Backups.backupdb/[path]

En 10.8 Mountain Lion, el bypass se movió a 'Ayudantes':

$ /System/Library/Extensions/TMSafetyNet.kext/Helpers/bypass

En 10.10 Yosemite, el bypass se movió aquí:

$ /System/Library/Extensions/TMSafetyNet.kext/Contents/Helpers/bypass

Referencias

Esto sí se parece a lo que buscaba. Para aclarar: Al "eliminar el enlace duro de cada copia de seguridad", quiere decir "de cada instantánea", ¿verdad? ¿Y usar el comodín en el comando sudo bypass rm -f */Macintosh\ HD\Users\csm\vm.imgasegura que todo esto se logre de una sola vez?
@Jan Se rmejecuta después cd /Volumes/DISK/Backups.backupdb/MACHINE, por lo que el comodín se expandirá a todas las carpetas fechadas que contienen la imagen. Sin embargo , he corregido un error \\ tipográfico /en la respuesta.
¡Yaaaaaaasssss! He estado buscando esto durante años, lo probaré en algunas copias de seguridad menos críticas, ya que estoy más interesado en mantener la integridad del destino de la copia de seguridad para las copias de seguridad en curso. apple.stackexchange.com/questions/180214/…
@bmike Vuelva a comentar y déjeme saber lo que encuentra. También tengo algunas Mac en las que necesito hacer esto.
Lo haré @stephenwade: pueden pasar una semana o dos hasta que tenga tiempo libre para probar esto. Parece que bypasses exactamente el bisturí que necesito para mi herramienta. Me gustaría envolverlo en swift o python para que sea más fácil de usar, pero veremos si vuelvo al shell
En caso de que alguien tenga macOS 10.13 High Sierra, quería mencionar bypassque se encuentra en el mismo lugar que estaba en 10.10. Lo usé y funcionó exactamente como se esperaba.
Actualización: esto no funcionará con una copia de seguridad APFS Time Machine

Según man tmutil, el tmutil deletecomando se puede usar para eliminar una o más instantáneas , directorios de máquinas o almacenes de copias de seguridad . Los términos se definen al principio de la misma página del manual:

  • instantánea : un directorio dentro de un directorio de máquina que representa una única copia de seguridad inicial o incremental de una computadora (p. ej. /Volumes/Chronoton/Backups.backupdb/thermopylae/2011-07-03-123456)
  • directorio de la máquina : un directorio dentro de un almacén de copias de seguridad que contiene todas las copias de seguridad de una computadora en particular (p. ej. /Volumes/Chronoton/Backups.backupdb/thermopylae)
  • almacén de copia de seguridad : el directorio "Backups.backupdb" de nivel superior en la raíz de un disco de copia de seguridad (p. ej. /Volumes/Chronoton/Backups.backupdb)

Por lo tanto, parece que lamentablemente no es posible usarlo tmutilpara eliminar elementos específicos dentro de una instantánea.