Exclua todos os backups de arquivos / pastas específicos com tmutil

10

Estou tentando excluir todos os backups de itens específicos através da linha de comando. Eu posso fazer isso usando a GUI através das seguintes etapas:

  1. Entrar na máquina do tempo
  2. Navegue até o arquivo a ser excluído
  3. Clique com o botão direito do mouse (ou clique no ícone de roda dentada no localizador) e escolha "Excluir todos os backups de ..."

Como posso replicar isso na linha de comando usando tmutil? Especialmente, ao usar o Backup Loupe para detectar arquivos grandes, seria mais fácil usar o Terminal (já que não preciso inserir o TimeMachine a cada vez que quero excluir um arquivo específico e navegar nele usando o Finder, e solte-o no Terminal para um comando para excluí-lo).

Eu esperava poder usar algo assim:

sudo tmutil delete /path/to/file

no entanto, me dá o erro:

"Destino de exclusão inválido (erro 22)" `

Isso funciona bem:

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

E isso também:

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

De acordo com man tmutilo deletecomando também deve ser capaz de excluir itens específicos. No entanto, estou sem sorte até agora. Embora existam inúmeras respostas neste site (e em outros lugares) para excluir backups específicos com tmutile excluir itens de backup específicos por meio da GUI (usando o método descrito acima), não foi possível encontrar nenhuma maneira que não seja da GUI para excluir itens de backup específicos .

jan
fonte
1
@stephenwade Vejo que você adicionou uma recompensa a esta pergunta, obrigado :) Agora devo aceitar uma resposta ou você deve dar a recompensa a alguém? Não estou claro como funcionam as recompensas pelas perguntas dos outros.
jan
2
Você pode aceitar (ou não aceitar) a resposta que desejar, sem afetar a recompensa.
nohillside

Respostas:

9

Encontrei estas perguntas e respostas da SU intituladas: Como excluir arquivos do Time Machine usando a linha de comando que demonstra um método para excluir arquivos específicos da CLI. Esta resposta destacou um método que soa como o que você deseja:

Meu disco de backup está cheio. Eu tenho um arquivo muito grande (muitos gigabytes) com backup por meses. Há uma cópia física dela, mas muitos instantâneos com links físicos para essa cópia. Para realmente me livrar desse arquivo, preciso remover o link físico de cada backup.

Nessa resposta, foi mostrado que se poderia usar este método para excluir um arquivo:

$ 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

O método para excluir o arquivo usa uma ferramenta CLI auxiliar incluída no Time Machine chamada bypass:

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

localização do desvio

Como bypassé considerado um script auxiliar para o Time Machine, sua localização normalmente não está no seu computador $PATH. Portanto, você precisará especificar o caminho completo para o executável. Além disso, a Apple o mudou para diferentes versões do macOS.

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

Em 10.8 Mountain Lion, o desvio passou para 'Helpers':

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

Em 10.10 Yosemite, o desvio passou para aqui:

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

Referências

slm
fonte
Isso realmente parece com o que eu estava procurando. Para esclarecer: "Ao remover o link físico de todo backup", você quer dizer "de todo instantâneo", certo? E o uso do curinga no comando sudo bypass rm -f */Macintosh\ HD\Users\csm\vm.imggarante que tudo isso seja realizado de uma só vez?
jan
1
@Jan rmDepois cd /Volumes/DISK/Backups.backupdb/MACHINEque o caractere é executado , o curinga se expande para todas as pastas datadas que contêm a imagem. Eu fixo um \\ - /erro de digitação na resposta embora.
nohillside
2
Yaaaaaasssss! Há anos que procuro por isso, testarei alguns backups menos críticos, pois estou mais interessado em manter a integridade do destino do backup em backups contínuos. apple.stackexchange.com/questions/180214/…
bmike
2
@bmike Por favor, comente e deixe-me saber o que você encontra. Eu também tenho alguns Macs nos quais preciso fazer isso.
stephenwade 21/04
Vou @stephenwade - pode demorar uma semana ou duas até eu ter tempo livre para testar isso. Parece que bypassé exatamente o bisturi que preciso para minha ferramenta. Gostaria de envolvê-lo em swift ou python, para que seja mais fácil de usar, mas veremos se eu
reverto
2

De acordo com man tmutil, o tmutil deletecomando pode ser usado para excluir um ou mais instantâneos , diretórios de máquinas ou armazenamentos de backup . Os termos são definidos no início da mesma página do manual:

  • instantâneo : um diretório dentro de um diretório da máquina que representa um único backup inicial ou incremental de um computador (por exemplo /Volumes/Chronoton/Backups.backupdb/thermopylae/2011-07-03-123456)
  • diretório da máquina : um diretório dentro de um armazenamento de backup que contém todos os backups para um computador específico (por exemplo /Volumes/Chronoton/Backups.backupdb/thermopylae)
  • armazenamento de backup : o diretório "Backups.backupdb" de nível superior na raiz de um disco de backup (por exemplo /Volumes/Chronoton/Backups.backupdb)

Portanto, parece que infelizmente não é possível usar tmutilpara excluir itens específicos em um instantâneo.

nohillside
fonte