Cómo descomprimir varios archivos zip en una única estructura de directorio (por ejemplo, exportación de carpetas de Google Drive)

Cómo descomprimir varios archivos zip en una única estructura de directorio (por ejemplo, exportación de carpetas de Google Drive)

Supongamos que comenzó con un directorio sin comprimir A, con la siguiente estructura:

$ tree A
A
└── inner_dir
    ├── file1.txt
    └── file2.txt

1 directory, 2 files

Ahora suponga que le han proporcionado dos archivos zip 1.zipy 2.ziplos ha derivado de A. 1.zipcontiene solo file1.txty 2.zipcontiene solo file2.txt:

# -l flag simply lists file contents

$ unzip -l 1.zip 
Archive:  1.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2017-09-30 21:49   A/
        0  2017-09-30 22:27   A/inner_dir/
        0  2017-09-30 21:49   A/inner_dir/file1.txt
---------                     -------
        0                     3 files

$ unzip -l 2.zip 
Archive:  2.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2017-09-30 21:49   A/
        0  2017-09-30 22:27   A/inner_dir/
        0  2017-09-30 22:27   A/inner_dir/file2.txt
---------                     -------
        0                     3 files

¿Qué comando puedo usar para reconstituir mediante programación el directorio descomprimido original Aa partir de la combinación de 1.zipy 2.zip?

Contexto:Al exportar un directorio grande desde Google Drive, el contenido se divide en un conjunto de 2 o más archivos zip. Cada archivo zip contiene un subconjunto de archivos que, cuando se toman en conjunto, reconstituyen el directorio original. Qué archivos contienen en qué zip parece ser más o menos aleatorio. Estoy buscando una solución que se generalice a n > 1 archivos zip, no solo al caso especial de exactamente 2 archivos.

Respuesta1

Mueva el conjunto de archivos que desea descomprimir a un directorio dedicado y luego use unzip:

$ unzip '*.zip' -d combined

Archive:  1.zip
   creating: combined/A/
   creating: combined/A/inner_dir/
 extracting: combined/A/inner_dir/file1.txt  

Archive:  2.zip
 extracting: combined/A/inner_dir/file2.txt  

2 archives were successfully processed.

Controlar:

$ tree combined
combined
└── A
    └── inner_dir
        ├── file1.txt
        └── file2.txt

2 directories, 2 files

Respuesta2

@lcharbon, tu problema es la forma en que zip maneja la codificación no estándar.

Puedes resolverlo usando p7zip, que lo maneja mejor.

Aquí está el comando analógico usando p7zip:

7z x '*.zip' -ocombined

Puede instalar p7zip en Mac usando Brew brew install p7zipo los administradores de paquetes de su distribución en Linux.

información relacionada