tar anexar ao arquivo no arquivo

2

Bom dia,

Eu tenho um arquivo compactado tar tar.bzip2 (criado usando tar jcf ), que contém um arquivo chamado data.txt (1) . Por outro lado, eu tenho outro arquivo também chamado data.txt (2) .

Existe uma maneira de acrescentar o arquivo (2) ao final do arquivo (1) sem descompactar o arquivo bz2, anexar o arquivo e depois tará-lo novamente?
A propósito, eu já fiz os três passos, estou pedindo apenas por curiosidade (ou 'por curiosidade' ... não tenho certeza sobre essa expressão em inglês).

Estou procurando a opção certa, mas não consigo descobrir:

  • A opção -r me diz "abortar", eu acho, porque tentei anexar um arquivo que já existe no arquivo.
  • -u não pode atualizar arquivos compactados, embora eu ache que ele só substituirá (1) por (2) .
  • -A também me diz "abortar". Eu não tenho certeza do que essa opção faz. Parece adicionar os arquivos em um arquivo para outro arquivo existente. Então não é o que eu quero.

Estou usando o GNU tar 1.15.1 no Linux.

Nota:

Acho que não expliquei bem, então é melhor usar um exemplo:
Eu tenho um arquivo chamado data.tar.bz2 que contém um arquivo chamado data.txt (1) . Seu conteúdo pode ser

A

Eu tenho outro arquivo também chamado data.txt (2) . Seu conteúdo pode ser

B

Meu objetivo é que o arquivo contido em data.tar.bz2 tenha os conteúdos dos arquivos (1) e (2) em um arquivo chamado, claro, data.txt :

A
B

Em outras palavras, faça isso usando um comando, sem descompactar, descompactar, criar diretórios temporais, etc ...:

mkdir $tempDir
tar jxf data.tar.bz2 -C $tempDir
cat data.txt >> $tempDir/data.txt
tar jcf data.tar.bz2 -C $tempDir data.txt 
rm -r $tempDir 

Sim, desejo anexar, mas a opção -r não funcionará porque, se não estiver errado, ele anexará arquivos ao arquivamento, mas não anexará o conteúdo de um arquivo existente no arquivamento. Espero que isso esclarece ... não tenho certeza em tudo xD

    
por Albert 17.12.2014 / 10:34

3 respostas

1

Se data.txt for o único arquivo no arquivo TAR, você pode acrescentar diretamente, simplesmente não usando tar :

$ echo Hello | bzip2 > data.txt.bz2
$ echo Stack | bzip2 >> data.txt.bz2
$ echo Exchange | bzip2 >> data.txt.bz2
$ bunzip2 < data.txt.bz2
Hello
Stack
Exchange
    
por 17.12.2014 / 15:22
1

Você pode anexar arquivos a um arquivo tar não compactado com a opção --append , por exemplo:

$ tar --append --file=tarfile.tar data.txt

Cuidado com as consequências de adicionar vários arquivos com o mesmo nome a um arquivo existente:

link

Você não pode, tanto quanto eu saiba, anexar ou atualizar arquivos em um arquivo compactado sem primeiro descompactá-lo.

    
por 17.12.2014 / 14:21
1

Eu posso pensar apenas no utilitário Archivemount para fazer isso.

1) Instale archivemount (se ainda não estiver disponível na sua máquina). Está disponível no repositório EPEL.

2) Use o comando archivemount para montar seu arquivo tar em qualquer um dos diretórios em sua máquina.

archivemount xyz.bzip2 /path/to/a/directory/

Uma vez montado, você poderá navegar pelo arquivo como se fosse um diretório regular. A partir daí, você pode editar / atualizar ou anexar conteúdo ao arquivo que está no arquivo.

Aqui você tem mais detalhes sobre o uso de archivemount e abaixo está um snippet do meu servidor quando eu archivemount ed um arquivo bzip2.

[root@server usr]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       15G  9.0G  5.1G  64% /
none            245M     0  245M   0% /dev/shm
[root@server usr]# archivemount puppet_codes.bzip2 /usr/local/archtest/
[root@server usr]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       15G  9.0G  5.1G  64% /
none            245M     0  245M   0% /dev/shm
archivemount   1000G     0 1000G   0% /usr/local/archtest
[root@server usr]# ls /usr/local/archtest
puppet_codes
[root@server usr]# cat /usr/local/archtest/puppet_codes/emaillist.txt
[email protected]
[email protected]
[root@server usr]#

O seguinte é o pacote que eu instalei no meu servidor.

[root@server ~]# rpm -qi archivemount-0.8.1-2.el6.x86_64
Name        : archivemount                 Relocations: (not relocatable)
Version     : 0.8.1                             Vendor: Fedora Project
Release     : 2.el6                         Build Date: Sun Oct 13 17:06:30 2013
Install Date: Wed Dec 17 13:45:01 2014         Build Host: buildvm-04.phx2.fedoraproject.org
Group       : System Environment/Libraries   Source RPM: archivemount-0.8.1-2.el6.src.rpm
Size        : 70774                            License: LGPLv2+
Signature   : RSA/8, Sun Oct 13 18:43:34 2013, Key ID 3b49df2a0608b895
Packager    : Fedora Project
URL         : http://www.cybernoia.de/software/archivemount/
Summary     : FUSE based filesystem for mounting compressed archives
Description :
Archivemount is a piece of glue code between libarchive and FUSE. It can be
used to mount a (possibly compressed) archive (as in .tar.gz or .tar.bz2)
and use it like an ordinary filesystem.
    
por 17.12.2014 / 15:08

Tags