2
respostas

Adicionando um arquivo ao arquivo .tar

Olá. Minha dúvida é a seguinte.Suponha que criei um arquivo "teste.tar.gz" com um conteúdo qualquer e agora eu quero adicionar o arquivo "novo.txt" ao arquivo tar.gz. Qual o comando correto para executar essa operação?

2 respostas

Tiago, bom dia!

Cara, até onde sei, a compactação .tar.gz não permite adicionar ou modificar aquivos que estejam compactados. Até onde sei, devido ao processo de compactação que usa tar + gz, torna este processo inviável de manipular o arquivo compactado diretamente.

Se fosse somente .tar, o comando é:

tar -rf compactado.tar novo.txt

Usando gzip, eu uso vários comandos encadeados que extraem e compactam os arquivos novamente, adicionando um novo.

Segue uma sequência de comandos para teste:

// criando arquivos para teste
touch teste1.txt teste2.txt teste3.txt teste4.txt

// criando tar.gz de todos os arquivos na pasta atual, e removendo os originais ao final do processo
tar -zcvf compactado.tar.gz * --remove-files

// comando encadeados para descompactar e excluir o tar.gz, apenas mostrando como descompactar e excluir, não deve ser executado neste exemplo
// gunzip -c compactado.tar.gz | tar -xvf -; rm compactado.tar.gz

// criando novos arquivos para serem incorporados ao tar
touch teste5.txt teste6.txt teste7.txt teste8.txt teste9.txt teste10.txt

// comando encadeados para descompactar e compactar novamente com novo arquivo e os demais que já exisitam, removendo os originais ao final do processo
gunzip -c compactado.tar.gz | tar -xvf -; rm compactado.tar.gz; tar -zcvf compactado.tar.gz * --remove-files

// verificando o conteúdo do tar
tar -tvf compactado.tar.gz

Se alguém souber de algum comando para fazer a mesma coisa, usando .tar.gz, sem precisar descompactar, eu também quero muito saber.

Pois no meu caso, geralmente os arquivos compactados pesam mais de 1GB, e as vezes demora muito para extrair e compactar novamente.

Já no caso de arquivos .zip é possível fazer esta operação facilmente, pena que o limite é de 4GB, mesmo com a nova versão, nem todas as distribuições possuem a versão nova.

Até onde eu sei, não tem como atualizar um arquivo que já utiliza compressão. Então, você teria primeiro de descomprimir o arquivo para o formato tar, atualizar e depois comprimir novamente.

tar -xzf arquivo.tar.gz

tar -uf arquivo.tar novo_arquivo

tar -czf arquivo.tar

Mas, sua pergunta me deixou intrigado e vi que é possível adicionar arquivos:

supondo o mesmo arquivo.tar.gz que já contém alguns arquivos, você pode adicionar novos da seguinte forma:

tar -czf - arquivo_mais_novo diretorio_novissimo >> arquivo.tar.gz

Só que dessa forma, existe um marcador de fim de arquivo no meio do arquivo! Afinal, você apenas concatenou os novos arquivos compactados ao final do anterior.

Se você tentar descompactar normalmente, os últimos arquivos não vão aparecer.

#lista todos os arquivos inicialmente compactados tar -tvf arquivo.tar.gz

Mas, se utilizar a diretiva -i , que ignora os marcadores de final de arquivo, tudo aparecerá.

#lista todos os arquivos mesmo

tar -i -tvf arquivo.tar.gz

e para descompactar:

tar -i -xvf arquivo.tar.gz

Se tiver, opção, recomendo utilizar a primeira solução, por ser mais padrão. Mas, se for um arquivo muito grande, pode utilizar a segunda. Só tem de lembrar do -i

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software