
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 tar
no 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.