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 gostaria de extrair esse arquivo do arquivo (já concluído) e enviá-lo de volta ao arquivo assim que a edição for concluída. Como posso fazer isso? É problemático por causa do .
caminho?
73
.DS_Store
e, em seguida, refazer o tar do diretório.Respostas:
O formato do arquivo tar é apenas uma série de arquivos concatenados, juntamente 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 possui as funções de utilidade para fazer isso e existem complicações adicionais com a compactação, o que deve ocorrer antes e depois da alteração.
Existem, no entanto, ferramentas para o trabalho! Existem pelo menos dois sistemas disponíveis, que permitirão 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 está pronto para rolar.
A primeira opção seria o projeto de arquivo morto para o FUSE . Aqui está um tutorial sobre isso . Provavelmente, seu sistema já possui o FUSE e, caso contrário, sua distribuição deve ter uma opção para ele.
A outra opção é tarfs . É mais simples de usar , mas ouvi dizer que ele tem alguns problemas com a corrupção de arquivos bzip2, para que você possa testar isso muito bem primeiro.
fonte
Para extrair seu arquivo do seu arquivo, você pode usá-lo
tar xzf archive.tar.gz my/path/to/file.txt
. Observe que os diretórios no caminho do arquivo também serão criados. Usetar t
(ietar tzf archive.tar.gz
) para listar os arquivos no arquivo morto.tar
não suporta atualização "in-loco" de arquivos. No entanto, você pode adicionar arquivos ao final de um arquivo morto, mesmo se eles tiverem o mesmo caminho que um arquivo que já está no arquivo morto. Nesse caso, as duas cópias do arquivo estarão no arquivo morto e o arquivo adicionado posteriormente substituirá o anterior. O comando a ser usado para isso étar r
(outar u
apenas para adicionar arquivos mais recentes que o archive) é o comando a ser usado. O.
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:
O que provavelmente não é o que você deseja ouvir, pois significa reescrever o arquivo inteiro duas vezes. Se não for um arquivo muito grande, talvez seja melhor descompactar a coisa toda e depois refazê-la novamente após a edição. Como alternativa, você pode usar um arquivo não compactado.
fonte
tar
programa padrão . Tar como um formato de arquivo é realmente muito acessível. Você pode escrever facilmente um script para atualizar o conteúdo, mas existem outras ferramentas que já fazem isso .gzip -dc archive.tar.gz | tar -r data/data/com.myapp.backup/./files/settings.txt | gzip >archive_new.tar.gz
O Tar foi originalmente projetado para ser usado em fitas, portanto, "substituir" os arquivos não está 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, pois o tar precisa reorganizar o arquivo internamente.
fonte
no meu Linux x86_64 GNU / Linux para executar essa operação, uso simplesmente o seguinte comando:
Este comando causa a criação de um arquivo compactado
/path
usando uma lista de arquivos incluídos nolist.txt
arquivo.fonte
/path/archive.tar
, em vez de adicionar / atualizar esse arquivo.