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
tar
puede agregar archivos a un archivo ya existente, no se puede comprimir. Tendrás que irbunzip2
al archivo comprimido, dejando un tarball estándar. Luego puede usartar
la 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:
cat
es compatible y produce una secuencia de bzip2 válida (lo mismo ocurre con gzip);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: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
-i
se usará al intentar leer de los archivos creados de esta manera.fuente
i
a la línea de comando verán todo.