¿Hay alguna manera de agregar / actualizar un archivo en un archivo tar.gz? Básicamente, tengo un archivo que contiene un archivo /data/data/com.myapp.backup/./files/settings.txt
y me gustaría extraer ese archivo del archivo (ya hecho) y volver a insertarlo en el archivo una vez que se haya realizado la edición. ¿Cómo puedo lograr esto? ¿Es problemático por el .
en el camino?
73
.DS_Store
y luego volver a tar el directorio.Respuestas:
El formato de archivo tar es solo una serie de archivos concatenados junto con algunos encabezados. No es un trabajo muy complicado separarlo, poner su contenido y volver a armarlo. Dicho esto, Jander describió cómo el alquitrán como programa no tiene las funciones de utilidad para hacer esto y existen complicaciones adicionales con la compresión, que tiene que ocurrir antes y después de hacer un cambio.
¡Sin embargo, hay herramientas para el trabajo! Existen al menos dos sistemas que le permitirán realizar un montaje en bucle invertido de un archivo tar comprimido en una carpeta y luego realizar los cambios en el sistema de archivos. Cuando haya terminado, desmonte la carpeta y su archivo comprimido estará listo para rodar.
La primera opción sería el proyecto de montaje en archivo para FUSE . Aquí hay un tutorial sobre eso . Su sistema probablemente ya tenga FUSE y, si no lo tiene, su distribución debería tener una opción para ello.
La otra opción es tarfs . Es más simple de usar , pero he oído que tiene algunos problemas para corromper los archivos bzip2, por lo que primero puede probarlo bastante a fondo.
fuente
Para extraer su archivo de su archivo, puede usarlo
tar xzf archive.tar.gz my/path/to/file.txt
. Tenga en cuenta que también se crearán los directorios en la ruta del archivo. Usetar t
(es decirtar tzf archive.tar.gz
) para enumerar los archivos en el archivo.tar
no admite la actualización "in situ" de archivos. Sin embargo, puede agregar archivos al final de un archivo, incluso si tienen la misma ruta que un archivo que ya está en el archivo. En ese caso, ambas copias del archivo estarán en el archivo, y el archivo agregado más adelante anulará el anterior. El comando a usar para esto estar r
(otar u
solo para agregar archivos que son más nuevos que el archivo) es el comando a usar. El.
en el camino no debería ser un problema.Sin embargo, hay un inconveniente: no se puede agregar a un archivo comprimido. Entonces tendrías que hacer:
Lo que probablemente no sea lo que quieres escuchar, ya que significa reescribir todo el archivo dos veces. Si no es un archivo muy grande, podría ser mejor descomprimirlo todo y luego volverlo a tatar después de editarlo. Alternativamente, puede usar un archivo sin comprimir.
fuente
tar
programa estándar . Tar como formato de archivo es realmente muy accesible. Podría escribir fácilmente un script para actualizar el contenido usted mismo, pero hay otras herramientas que ya lo hacen .gzip -dc archive.tar.gz | tar -r data/data/com.myapp.backup/./files/settings.txt | gzip >archive_new.tar.gz
Originalmente, Tar estaba destinado a usarse para cintas, por lo que "reemplazar" archivos no está realmente en el diseño. Sin embargo, puede usar --delete para eliminar el archivo del tar original y luego -u para actualizar el tar y volver a agregar el archivo. Puede tomar un poco, ya que tar necesita reorganizar el archivo internamente.
fuente
en mi Linux x86_64 GNU / Linux para realizar esa operación, simplemente uso el siguiente comando:
Este comando causa la creación de un archivo comprimido
/path
utilizando una lista de archivos incluidos en ellist.txt
archivo.fuente
/path/archive.tar
, en lugar de agregar / actualizar ese archivo.