actualizar archivo en tar

actualizar archivo en tar

para el comando tar de Linux:

tar uf test.tar test.txt

pero para la opción de comando *BSD bsdtar u = r = agregar, es decir, no se puede actualizar el archivo, solo se puede agregar el archivo y también, lo intento compilar.archivolibrary, demostró que bsdtar no puede actualizar el archivo en tar.

Entonces, ¿por qué el comando tar en Linux puede actualizar el archivo en el archivo tar, pero bsdtar no?

Referirse a: alquitrán (Linux) alquitrán (OpenBSD)

Respuesta1

para *BSD bsdtar opción de comando u = r = agregar, es decir, no se puede actualizar el archivo

Creo que ambos añaden, man taren Linux dice

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

Aquí tienes una prueba para comprobarlo.

$ 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

Tenga en cuenta que el archivo tar ahora contiene versiones antiguas y nuevas de b.txt.

Bien, pasemos al meollo de su consulta.

¿Por qué el comando tar en Linux puede actualizar el archivo en el archivo tar, pero bsdtar no?

Puedes instalar Gnu tar en BSD en formato /usr/local/bin/gtar.

VerInformación del paquete para gtar-1.21-static.tgz (sh)


Actualizar:

¿Por qué tar no se puede actualizar en el lugar?

acceso aleatorio vs medios seriales

El nombre "tar" es una contracción de "archivo de cintas". El comando está pensado para poder utilizarse con archivos almacenados en medios serie, como cintas. La unidad de cinta no puede insertar nuevos trozos de cinta en el medio de la misma, ni puede cortar secciones de cinta existentes. Tampoco se puede leer al mismo tiempo que escribir. Para transformar una cinta con contenido a.txt, b.txt, c.txt en una con un b.txt más grande, primero se debe leer toda la cinta, almacenar el contenido (en la memoria o en el disco) y luego rebobinar la cinta y los nuevos contenidos redactados íntegramente. Es más rápido buscar la marca de fin de cinta y agregar la nueva versión de b.txt.

Además, muchas unidades de cinta (por ejemplo, DAT) añaden automáticamente una marca de fin de cinta al final de cada operación de escritura y esto no se puede evitar. Por lo tanto, reescribir incluso un b.txt del mismo tamaño o más pequeño en su posición actual dejaría a c.txt permanentemente inaccesible.

problemas del sistema de archivos

No es posible reemplazar el contenido en medio de un archivo con contenido de diferente longitud. Para reemplazar un archivo que contiene "bbb" con un archivo que contiene "bbbbbb", debe leer el archivo antiguo y escribir un archivo nuevo. Por lo tanto, es aún más fácil (y puede ser considerablemente más rápido) agregar "bbbbbb" (más el encabezado de metadatos del archivo) al final.

información relacionada