Como excluir arquivos de um diretório com base no conteúdo de um arquivo tar compactado com gzip?

1

Dado que eu:

  • tem um diretório que contém mais de 1000 arquivos
  • tem um arquivo tar gzip'ed que contém um subconjunto desses arquivos (x.tgz)

Qual é a única linha de comando (se for possível) que lerá o conteúdo do arquivo tar do gzip'ed e removerá todos os arquivos do diretório que estão contidos no arquivo tar?

    
por CGCampbell 22.07.2015 / 00:17

4 respostas

2

Você precisaria estar no diretório a partir do qual o arquivo tar foi criado, por exemplo $HOME . Então, se você tivesse um tgz de seu diretório Documentos localizado com segurança em /backup/Documents.tgz , faria isso:

$ for file in $(tar -tzf /backup/Documents.tgz); do \
      [[ -f $file ]] && rm $file || echo "$file does not exist"; done

Se você quiser também excluir diretórios, use rm -fr $file .

    
por 22.07.2015 / 00:44
0

Pode ser algo como isso irá ajudá-lo

rm -rf 'find . -name '*.tgz' -exec tar -tzf '{}' \;'

não sabe como isso funcionará com tantos arquivos.

    
por 22.07.2015 / 00:44
0
$ tar -tzf x.tgz  |grep -v '/$' | xargs -n1 -d '\n' echo rm

Remova o echo se estiver com boa aparência.

Explicação:

  • tar -tzf x.tgz - lista o conteúdo
  • grep -v '/$' - ignora diretórios
  • xargs -n1 -d '\n' echo rm - para cada linha ( -n1 ) ( -d '\n' ) da entrada, execute echo rm
por 22.07.2015 / 01:08
0

Como o tar (mesmo em modo não detalhado) lista links simbólicos e hardlinks na saída tar t , você não pode usar tar t para obter a lista se arquivos. Melhor uso:

star -t -tpath < archive.tar > file-list.txt

    
por 04.09.2015 / 15:15