Como descompactar vários arquivos zip em uma única estrutura de diretórios (por exemplo, exportação de pasta do Google Drive)

Como descompactar vários arquivos zip em uma única estrutura de diretórios (por exemplo, exportação de pasta do Google Drive)

Suponha que você começou com um diretório descompactado A, com a seguinte estrutura:

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

1 directory, 2 files

Agora suponha que você recebeu dois arquivos zip 1.zipderivados 2.zipde A. 1.zipcontém apenas file1.txte 2.zipcontém apenas 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

Que comando posso usar para reconstituir programaticamente o diretório original descompactado Aa partir da combinação de 1.zipe 2.zip?

Contexto:ao exportar um diretório grande do Google Drive, o conteúdo é dividido em um conjunto de dois ou mais arquivos zip. Cada arquivo zip contém algum subconjunto de arquivos que, quando reunidos, reconstituem o diretório original. Quais arquivos estão contidos em quais zip parecem ser mais ou menos aleatórios. Estou procurando uma solução que generalize para n> 1 arquivos zip, não apenas para o caso especial de exatamente 2 arquivos.

Responder1

Mova o conjunto de arquivos que deseja descompactar para um diretório dedicado e 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.

Verificar:

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

2 directories, 2 files

Responder2

@lcharbon, seu problema está na maneira como o zip lida com a codificação não padrão.

Você pode resolver isso usando o p7zip, que lida melhor com isso.

Aqui está o comando analógico usando p7zip:

7z x '*.zip' -ocombined

Você pode instalar o p7zip no Mac usando o Brew brew install p7zipou os gerenciadores de pacotes da sua distribuição no Linux.

informação relacionada