atualiza o arquivo no tar

1

para o comando tar do Linux:

tar uf test.tar test.txt

mas para o comando * BSD bsdtar opção u = r = acrescentar, ou seja, não pode atualizar o arquivo, só pode anexar arquivo e também, eu tentei compilar libarchive , 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 pode.

consulte: tar (Linux) tar (OpenBSD)

    
por yodabox 08.11.2012 / 07:01

1 resposta

1

for *BSD bsdtar command option u = r = append, that is can't update file

Acho que os dois 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, para o início da sua consulta

why tar command in Linux can update file in tar archive,but bsdtar can't.

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

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

Atualização:

Why can't tar update in-place?

acesso aleatório vs mídia serial

O nome "tar" é uma contração de "archive de fita". O comando destina-se a ser usado com arquivos armazenados em mídia serial, como fita. A unidade de fita não pode inserir novos comprimentos de fita no meio de sua fita, nem pode cortar seções existentes de fita. Nem pode ler ao mesmo tempo que escrever. Para transformar uma fita com o conteúdo a.txt, b.txt, c.txt para um com um b.txt maior, primeiro a fita inteira deve ser lida, o conteúdo armazenado (na memória ou no disco) e depois a fita rebobinada e o novo conteúdo escrito por extenso. É mais rápido procurar a marca de fim de fita e anexar a nova versão de 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 mesmo um b.txt do mesmo tamanho ou menor em sua posição existente deixaria o c.txt permanentemente inacessível.

problemas no sistema de arquivos

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

    
por 08.11.2012 / 11:18

Tags