Estoy buscando una manera de actualizar miles de archivos .tbz, así que lo haré con un script de shell. Necesito agregar un archivo a cada uno.
Mi pregunta es, ¿hay una forma más rápida de hacer esto sin extraer el contenido de cada tbz y luego volver a comprimirlo con el nuevo archivo incluido en el tar contenido? ¿Cómo se verían los comandos?
Gracias
linux
shell-script
shell
command-line
tar
Botella Cero
fuente
fuente

Respuestas:
Si bien
tarpuede agregar archivos a un archivo ya existente, no se puede comprimir. Tendrás que irbunzip2al archivo comprimido, dejando un tarball estándar. Luego puede usartarla capacidad de agregar archivos a un archivo existente y luego volver a comprimir conbzip2.Del manual:
fuente
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:
Sin embargo, si está interesado en una solución sucia que no requiera descompresión, puedo proporcionarle una, según las siguientes observaciones:
cates compatible y produce una secuencia de bzip2 válida (lo mismo ocurre con gzip);catno produce un archivo tar válido, por eso--concatenateexiste la opción, pero podemos pedirle a tar que pretenda que es válido:En base a este conocimiento, podemos hacer, por ejemplo:
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: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: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
-ise usará al intentar leer de los archivos creados de esta manera.fuente
ia la línea de comando verán todo.