Agregar archivos descomprimidos a una carpeta comprimida

33

Estoy tratando de agregar archivos descomprimidos a una carpeta existente ya comprimida, por ejemplo new folder.zip. ¿Es posible usarlo zip -r new folder.zipdespués de agregarles algunos archivos descomprimidos? ¿Este comando comprimirá la carpeta? ¿Hay alguna alternativa para hacer esto?

boo na
fuente
puedes canalizarlo, descomprimir el archivo original | luego comprima todo el contenido como crearía un archivo nuevo. No estoy seguro de cómo haría esto con un solo comando.
unixmiah

Respuestas:

44

Use el indicador de actualización: -u

Ejemplo:

zip -ur existing.zip myFolder

Este comando comprimirá y agregará myFolder(y su contenido) al existing.zip.


Uso avanzado:

El indicador 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 el -uindicador. 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 comprimirlos con la -ubandera. Nuevamente, solo los archivos modificados se comprimirán.

Ejemplo:

Estructura original de la fuente


ParentDir
├── file1.txt
├── file2.txt
├── ChildDir
│   ├── file3.txt
│   ├── Logs
│   │   ├── logs1.txt
│   │   ├── logs2.txt
│   │   ├── logs3.txt

Estructura de fuente actualizada


ParentDir
├── file1.txt
├── file2.txt
├── ChildDir
│   ├── file3.txt
│   ├── Logs
│   │   ├── logs1.txt
│   │   ├── logs2.txt
│   │   ├── logs3.txt 
│   │   ├── logs4.txt <-- NEW FILE 

Uso

$ zip -ur existing.zip ParentDir 
> updating: ParentDir/ChildDir/Logs (stored 0%)
>   adding: ParentDir/ChildDir/Logs/logs4.txt (stored 96%)
Ethan Strider
fuente
¡Gracias! ¿Cómo puedo especificar la carpeta en el zip para agregarlo?
Aaron Esau
Agregué una sección para responder a tu pregunta. :)
Ethan Strider
0

Creo que puede agregar archivos con este comando:

zip -r zipfile.zip newfile.txt newfile1.txt

La -ropción del comando zip le permite agregar archivos.

ryekayo
fuente
-rEs una opción recursiva.
ctrl-alt-delor
@richard, voy a arreglar eso. Dame algunos
ryekayo
@richard, resulta que la fuente que obtuve dice que puede usar el comando -r para modificar un archivo comprimido existente: linuxnix.com/2014/05/…
ryekayo
2
add: actualiza las entradas existentes y agrega nuevos archivos. Si el archivo no existe, créelo. Este es el modo por defecto. (no se necesita ninguna opción para reemplazar o agregar archivos. -rSe puede usar si se agregan directorios, o cuando no se agregan directorios. Bueno, en cualquier momento que no desee simplemente agregar el directorio y ningún contenido, casi todo el tiempo En resumen, el ejemplo es correcto, pero la explicación es incorrecta) (lo mejor es probarlo, esta es solo mi interpretación del manual).
ctrl-alt-delor
2
Por razones de seguridad, ¿está SEGURO de que desea modificar un archivo existente? En cambio, al menos haría una copia de seguridad, agregaría y luego volvería a verificar la integridad del archivo antes de comprometerme con el nuevo.
mdpc
0

La bandera -u funciona para que los archivos

zip -ur zip_to_upload.zip file_to_add.txt

Saludos

David Lopes
fuente
0

Utilicé con éxito el zipcomando. con la opción grow (-g), para agregar una subcarpeta que folder1/folder2contenga los archivos fileA.txty fileB.txt:

zip -gr folder.zip folder1/folder2

-rsignifica recurse dir.

Según tengo entendido, -g debería hacer crecer los archivos zip, no crear un nuevo archivo zip (que puede ser útil con archivos zip muy grandes). En caso de problemas, puede intentar primero crear subcarpetas en folder.zip con (por ejemplo):

zip -g folder.zip folder1
zip -g folder.zip folder2
Fabiano Tarlao
fuente
0

Si tiene muchos archivos en el mismo lugar con su archivo zip y desea copiarlos en el archivo, puede hacer lo siguiente:

zip -ur zipfile.zip !(zipfile.zip)

Esto actualiza su archivo zip (la -uopción) de forma recursiva ( -ropción) con todos los archivos encontrados, excepto el archivo zip en sí ( !es la negación del archivo zip)

Luego, simplemente puede eliminar todos los archivos excepto el archivo zip siguiendo la misma regla anterior:

rm !(zipfile.zip)
despina
fuente