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.zip
derivados 2.zip
de A
. 1.zip
contém apenas file1.txt
e 2.zip
conté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 A
a partir da combinação de 1.zip
e 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 p7zip
ou os gerenciadores de pacotes da sua distribuição no Linux.