Remove arquivos do arquivo tar

14

Eu tenho um arquivo grande foo.tar.xz que contém muito (digamos 200000) de arquivos. Eu descobri que este arquivo contém alguns (cerca de 5000) arquivos que eu não quero. Eu não tenho espaço em disco suficiente para descomprimir a coisa toda no meu disco; Além disso, temo que os atributos / direitos possam se perder se eu fizer isso. Eu tenho espaço suficiente para hospedar duas cópias do arquivo compactado . Existe uma ferramenta para remover alguns dos arquivos do arquivo (especificados com um regex no nome do arquivo) on-the-fly, ou seja, sem descompactar o arquivo em arquivos individuais?

    
por FUZxxl 21.03.2013 / 21:37

3 respostas

13

O GNU tar tem uma opção --delete que também funciona com arquivos atualmente.

Use assim, por exemplo:

tar -vf yourArchive.tar --delete your/path/to/delete

Cuidado: O mais provável é que não funcionem em qualquer tipo de mídia de fita magnética. Mas tar não tem problemas em trabalhar em um pipe, então você pode simplesmente usar um arquivo tar temporário e sobrescrever a fita com isso depois. Ele também não funcionará em arquivos compactados, então você precisaria descompactar o arquivo.

Além disso, a operação será bastante lenta em qualquer caso, devido à natureza linear compactada (por design) dos arquivos tar.

    
por 31.08.2016 / 12:47
11

(editado, como eu entendi mal a questão, que foi editada desde então também)

O melhor que você pode fazer é extrair, excluir e recompactar o arquivo inteiro.

unxz < foobar-old.tar.xz | tar --delete foo/bar | xz > foobar-new.tar.xz

Não é possível excluir arquivos de um tar diretamente.

tar é um fluxo, originalmente destinado a unidades de fita que não fazem buscas aleatórias - embora, em teoria, seja possível em um sistema de arquivos de disco fazer um furo / reescrever o arquivo restante, com a compressão o ponto é discutível como a maioria se nem todos os métodos de compactação dependem muito do conteúdo que ocorreu anteriormente no arquivo. Para fazer isso, você precisaria de um conhecimento muito detalhado sobre o método de compactação, bem como sobre o formato de arquivo tar. Essa é a complexidade em um ponto que ninguém se incomodaria com isso. É mais barato manter apenas os arquivos e ignorá-los.

Se você precisar dessa funcionalidade, o tar provavelmente não é o que você deseja.

    
por 21.03.2013 / 21:52
-4

De acordo com o manual , você pode passar uma lista de nomes de arquivos para tar para extrair apenas esses. Por exemplo:

$ tar --file archive.tar --list
foo
bar
baz

$ tar --file archive.tar --extract foo
    
por 21.03.2013 / 22:05

Tags