Предположим, вы начали с несжатого каталога A
со следующей структурой:
$ tree A
A
└── inner_dir
├── file1.txt
└── file2.txt
1 directory, 2 files
Теперь предположим, что вам дали два zip-файла 1.zip
, и 2.zip
один из них A
содержит 1.zip
только один file1.txt
, а другой 2.zip
содержит только один 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
Какую команду можно использовать для программного восстановления исходного разархивированного каталога A
из комбинации 1.zip
и 2.zip
?
Контекст:при экспорте большого каталога из Google Drive содержимое разбивается на набор из 2 или более zip-файлов. Каждый zip-файл содержит некоторое подмножество файлов, которые, взятые вместе, воссоздают исходный каталог. Какие файлы содержатся в каком zip-файле, кажется более или менее случайным. Я ищу решение, которое обобщает n > 1 zip-файлов, а не только частный случай ровно 2 файлов.
решение1
Переместите набор файлов, которые вы хотите распаковать, в отдельный каталог, а затем используйте 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.
Проверять:
$ tree combined
combined
└── A
└── inner_dir
├── file1.txt
└── file2.txt
2 directories, 2 files
решение2
@lcharbon ваша проблема в том, как zip обрабатывает нестандартную кодировку.
Эту проблему можно решить с помощью p7zip, который справляется с этим лучше.
Вот аналоговая команда с использованием p7zip:
7z x '*.zip' -ocombined
Вы можете установить p7zip на Mac с помощью brew brew install p7zip
или менеджеров пакетов вашего дистрибутива на Linux.