¿Es posible reemplazar un archivo en un archivo zip sin descomprimir, eliminar el archivo anterior, agregar el nuevo archivo y volver a comprimirlo?
La razón es que tengo un archivo zip que es realmente grande, hay un xml dentro del archivo zip que tengo que actualizar a veces. Abrir la cremallera y volver a cerrarla lleva mucho tiempo. Así que me gustaría poder reemplazar el xml dentro del zip a través de un script. Ya tengo que verifica si hay actualizaciones en el xml que tengo.
Entonces, ¿es posible simplemente reemplazar el xml sin descomprimir y volver a comprimir?
Lo siento, usaría el comando zip para hacer cosas como esa, pero el problema es que el script es en realidad para un teléfono Android y zip no es un comando que pueda usar, lamentablemente, lo siento, lo dejé fuera. Habría usado zip definitivamente si pudiera, pero solo tengo descomprimir para droid y luego hay alquitrán en busybox pero tar no hace lo que necesito
Respuestas:
Desde zip (1) :
Por lo tanto, use el
zip
comando como lo haría normalmente para crear un nuevo archivo .zip que contenga solo ese archivo, excepto que el nombre de archivo .zip que especifique será el archivo existente.fuente
zip -r myfolder.zip myfolder
si desea actualizarmyfolder/otherfolder/myfile.txt
, siga adelante, edite el archivo y ejecútelozip -r myfolder.zip myfolder/otherfolder/myfile.txt
Encontré que el
zip
archivo de Linux es engorroso para reemplazar un solo archivo en un zip. Lajar
utilidad del Java Development Kit puede ser más sencilla. Considere la tarea común de actualizarWEB/web.xml
en un archivo JAR (que es solo un archivo zip):Aquí
path/to/dir
está la ruta a un directorio que contiene elWEB-INF
directorio (que a su vez contieneweb.xml
).fuente
WEB-INF
que tenga ese archivo?Intente lo siguiente:
Un ejemplo:
$ zip test.zip test/test.txt updating: test/test.txt (stored 0%)
fuente
updating:
lugar deadding:
si desea actualizar un archivo dentro del zip; de lo contrario, está agregando archivos al zip, no reemplazándolo.Sé que esta es una vieja pregunta, pero yo quería hacer lo mismo. Actualice un archivo en un archivo zip. Y ninguna de las respuestas anteriores realmente me ayudó.
Aquí esta lo que hice. Directorio temporal creado
abc
. Copiadofile.zip
aabc
y se extrae el archivo en ese directorio. Edité el archivo que quería editar. Luego, mientras estaba dentroabc
, ejecutó el siguiente comando-u
El interruptor buscará archivos nuevos o modificados y los agregará al archivo zip.fuente
Utilice la bandera de actualización:
-u
Ejemplo:
Este comando comprimirá y agregará
myFolder
(y su contenido) al archivoexisting.zip
.Uso avanzado:
La bandera de actualización en realidad compara los archivos entrantes con los existentes y agregará nuevos archivos o actualizará los existentes.
Por lo tanto, si desea agregar / actualizar un subdirectorio específico dentro del archivo zip, simplemente actualice la fuente como desee y luego vuelva a comprimir toda la fuente con la
-u
bandera. Solo se comprimirán los archivos modificados.Si no tiene acceso a los archivos de origen, puede descomprimir el archivo zip, luego actualizar los archivos deseados y luego volver a comprimir con la
-u
bandera. Nuevamente, solo se comprimirán los archivos modificados.Ejemplo:
Estructura de fuente original
Estructura de fuente actualizada
Uso
fuente
Puede usar: zip -u file.zip path / file_to_update
fuente
También existe la opción -f que refrescará el archivo zip. Se puede utilizar para actualizar TODOS los archivos que se han actualizado desde que se generó el zip (asumiendo que están en el mismo lugar dentro de la estructura de árbol dentro del archivo zip).
Si su archivo se llama /myfiles/myzip.zip, todo lo que tiene que hacer es
fuente
Desde el lado de la estructura del archivo ZIP: puede actualizar el archivo zip sin volver a comprimirlo, solo tendrá que omitir todos los archivos anteriores al archivo que necesita reemplazar, luego coloque su archivo actualizado y luego el resto de los archivos. Y finalmente deberá poner la estructura de directorio central actualizada. Sin embargo, dudo que las herramientas más comunes te permitan hacer esto.
fuente
7zip
(7za) se puede usar para agregar / actualizar archivos / directorios muy bien:Ejemplo: Reemplazo (independientemente de la fecha del archivo) el
MANIFEST.MF
archivo en un archivo JAR. El/source/META-INF
directorio contiene elMANIFEST.MF
archivo que desea poner en eljar
(zip):7za a /tmp/file.jar /source/META-INF/
Solo actualizar (no reemplaza el destino si la fuente es anterior)
7za u /tmp/file.jar /source/META-INF/
fuente
si es posible.
en los sistemas basados en Linux, simplemente instale zip y podrá llamarlo en la línea de comandos. eche un vistazo a la página de manual: http://linux.die.net/man/1/zip
pero en mi experiencia personal, si es posible y la compresión no es tan importante, esto funciona mejor con archivos tar simples y tar.
fuente