La otra respuesta es correcta: no puede actualizar correctamente un archivo tar comprimido sin descomprimirlo. La documentación de GNU tar lo sugiere, e intentar actualizar falla con un mensaje de error explícito:
$ tar --concatenate --file=cat.tar.bz2 two.tar.bz2
tar: Cannot update compressed archives
tar: Error is not recoverable: exiting now
Sin embargo, si está interesado en una solución sucia que no requiera descompresión, puedo proporcionarle una, según las siguientes observaciones:
- Agregar secuencias de bzip2 usando
cat
es compatible y produce una secuencia de bzip2 válida (lo mismo ocurre con gzip);
- agregar tars usando
cat
no produce un archivo tar válido, por eso --concatenate
existe la opción, pero podemos pedirle a tar que pretenda que es válido:
Puede parecerle más intuitivo querer o intentar usar cat para concatenar dos archivos en lugar de usar la --concatenate
operación; después de todo, cat es la utilidad para combinar archivos.
Sin embargo, los archivos tar incorporan un marcador de fin de archivo que debe eliminarse si los archivos concatenados deben leerse correctamente como un archivo. --concatenate
elimina el marcador de fin de archivo del archivo de destino antes de agregar cada nuevo archivo. Si usa cat para combinar los archivos, el resultado no será un archivo de formato tar válido. Si necesita recuperar archivos de un archivo que se agregó al uso de la utilidad cat, use la opción --ignore-zeros
( -i
).
En base a este conocimiento, podemos hacer, por ejemplo:
cat {one,two}.tar.bz2 >combined.tar.bz2
Esto resulta, como explica el fragmento de documentación anterior, en un archivo tar no válido, pero con el uso --ignore-zeros
, aún se puede leer completamente:
## Show contents of `one.tar.bz2'
$ tar tf one.tar.bz2
a
b
## Show contents of `two.tar.bz2'
$ tar tf two.tar.bz2
c
## Show contents of `combined.tar.bz2', bypassing the bad format
$ tar tif combined.tar.bz2
a
b
c
Observe cómo lo anterior enumera los tres archivos de los dos archivos originales, mientras que omitir -i
(correctamente) solo enumera los archivos del primer archivo original:
$ tar tf combined.tar.bz2
a
b
Una vez más, eso no es más que un truco sucio, pero podría ser útil si controla los lados de escritura y lectura y puede asegurarse de que -i
se usará al intentar leer de los archivos creados de esta manera.