Adiciona / atualiza um arquivo para um arquivo tar.gz existente?

65

Existe uma maneira de adicionar / atualizar um arquivo em um arquivo tar.gz? Basicamente, eu tenho um arquivo que contém um arquivo em /data/data/com.myapp.backup/./files/settings.txt e eu gostaria de puxar esse arquivo do arquivo (já pronto) e empurrá-lo de volta para o arquivo assim que a edição estiver concluída. Como posso fazer isso? É problemático por causa do . no caminho?

    
por Naftuli Kay 13.05.2011 / 07:32

4 respostas

13

O formato do arquivo tar é apenas uma série de arquivos concatenados com alguns cabeçalhos. Não é um trabalho muito complicado separá-lo, colocar seu conteúdo e juntá-lo novamente. Dito isto, Jander descreveu como o tar como um programa não tem as funções de utilidade para fazer isso e existem complicações adicionais com a compressão, que tem que tanto antes como depois de fazer uma mudança.

Existem, no entanto, ferramentas para o trabalho! Existem pelo menos dois sistemas que permitem que você faça uma montagem de loopback de um arquivo tar compactado em uma pasta e faça as alterações no sistema de arquivos. Quando terminar, desmonte a pasta e seu arquivo compactado estará pronto para ser processado.

A primeira opção seria o projeto archivemount para FUSE . Aqui está um tutorial sobre isso . Seu sistema provavelmente já tem o FUSE e, se não for sua distribuição, deve ter uma opção para isso.

A outra opção é tarfs . É mais simples de usar , mas eu ouvi dizer que tem alguns problemas com o corrompimento de arquivos bzip2, então você pode testar isso bem primeiro.

    
por 13.05.2011 / 10:44
37

Para extrair seu arquivo do seu arquivo, você pode usar tar xzf archive.tar.gz my/path/to/file.txt . Observe que os diretórios no caminho do arquivo também serão criados. Use tar t (ou seja, tar tzf archive.tar.gz ) para listar os arquivos no arquivo.

tar não suporta a atualização "in-loco" de arquivos. No entanto, você pode adicionar arquivos ao final de um arquivo, mesmo que eles tenham o mesmo caminho de um arquivo já existente no arquivo. Nesse caso, ambas as cópias do arquivo estarão no arquivo e o arquivo adicionado posteriormente substituirá o anterior. O comando a ser usado para isso é tar r (ou tar u para adicionar somente arquivos mais recentes que o archive) é o comando a ser usado. O . no caminho não deve ser um problema.

Existe um problema: você não pode adicionar a um arquivo compactado. Então você teria que fazer:

gunzip archive.tar.gz
tar rf archive.tar data/data/com.myapp.backup/./files/settings.txt
gzip archive.tar

O que provavelmente não é o que você quer ouvir, pois significa reescrever o arquivo inteiro duas vezes. Se não for um arquivo muito grande, talvez seja melhor descompactar tudo e, depois, editá-lo novamente. Como alternativa, você poderia usar um arquivo descompactado.

    
por 13.05.2011 / 08:34
8

O Tar foi originalmente concebido para ser usado em fitas, por isso os arquivos "substituídos" não estão realmente no design. No entanto, você pode usar --delete para excluir o arquivo do tar original e, em seguida, -u para atualizar o tar e adicionar novamente o arquivo. Pode demorar um pouco, já que o tar precisa reorganizar o arquivo internamente.

    
por 29.07.2016 / 20:45
-4

no meu Linux x86_64 GNU / Linux para executar essa operação eu uso simplesmente o seguinte comando:

tar cvfpz /path/archive.tar -T list.txt

Este comando causa a criação de um arquivo compactado em /path usando uma lista de arquivos incluída no arquivo list.txt .

    
por 03.04.2014 / 17:03

Tags