atualizar arquivo em tar

atualizar arquivo em tar

para comando tar do Linux:

tar uf test.tar test.txt

mas para a opção de comando *BSD bsdtar u = r = anexar, ou seja, não é possível atualizar o arquivo, só posso anexar o arquivo e também, tento compilararquivo de biblioteca, provou que o bsdtar não pode atualizar o arquivo no tar.

Então, por que o comando tar no Linux pode atualizar o arquivo no arquivo tar, mas o bsdtar não.

referir-se: alcatrão (Linux) alcatrão (OpenBSD)

Responder1

para *BSD opção de comando bsdtar u = r = anexar, ou seja, não é possível atualizar o arquivo

Acho que ambos acrescentam, man tarno Linux diz

   -r, --append
          append files to the end of an archive
   -u, --update
          only append files that are newer than the existing in archive

Aqui está um teste para provar isso

$ uname -s
Linux
$ tar --version
tar (GNU tar) 1.15.1

$ echo aaa > a.txt
$ echo bbb > b.txt
$ echo ccc > c.txt

$ tar cvf x.tar *txt
a.txt
b.txt
c.txt

$ echo BBB > b.txt

$ tar -uvf x.tar b.txt
b.txt

$ tar tvf x.tar
-rw-rw-r-- ian/ian           4 2012-11-08 16:43:10 a.txt
-rw-rw-r-- ian/ian           4 2012-11-08 16:43:17 b.txt
-rw-rw-r-- ian/ian           4 2012-11-08 16:43:26 c.txt
-rw-rw-r-- ian/ian           4 2012-11-08 16:48:22 b.txt

Observe que o arquivo tar agora contém versões antigas e novas de b.txt

OK, então vamos ao cerne da sua consulta

por que o comando tar no Linux pode atualizar o arquivo no arquivo tar, mas o bsdtar não.

Você pode instalar o Gnu tar no BSD em /usr/local/bin/gtar.

VerInformações do pacote para gtar-1.21-static.tgz (sh)


Atualizar:

Por que o tar não pode ser atualizado no local?

acesso aleatório vs mídia serial

O nome "tar" é uma contração de "tape archive". O comando deve ser utilizado com arquivos armazenados em mídia serial, como fita. A unidade de fita não pode inserir novos pedaços de fita no meio da fita, nem pode cortar seções existentes de fita. Nem pode ler ao mesmo tempo que escreve. Para transformar uma fita com conteúdo a.txt, b.txt, c.txt em uma com b.txt maior, primeiro toda a fita deve ser lida, o conteúdo armazenado (na memória ou no disco) e depois a fita rebobinada e os novos conteúdos escritos na íntegra. É mais rápido procurar a marca de fim da fita e anexar a nova versão do b.txt.

Além disso, muitas unidades de fita (por exemplo, DAT) adicionam automaticamente uma marca de fim de fita no final de cada operação de gravação e isso não pode ser evitado. Portanto, reescrever até mesmo um b.txt do mesmo tamanho ou menor em sua posição existente deixaria c.txt permanentemente inacessível.

problemas no sistema de arquivos

Não é possível substituir o conteúdo no meio de um arquivo por conteúdo de comprimento diferente. Para substituir um arquivo contendo "bbb" por um arquivo contendo "bbbbbb" você deve ler o arquivo antigo e escrever um novo arquivo. Portanto, ainda é mais fácil (e pode ser consideravelmente mais rápido) acrescentar "bbbbbb" (mais o cabeçalho dos metadados do arquivo) ao final.

informação relacionada