Если Вы просто пытаетесь разархивировать содержание каталога в рамках zip-файла, не сохраняя ни одной иерархии, эта папка в, в zip-файле затем Вам не повезло. Нет никакого метода, который обеспечивает это. Проблема с тем, как создаются zip-файлы. Они обычно создаются как твердый блоб и так не легкодоступны в способе, которым большинство думало бы.
Только 2 подхода, которые я видел, который может сделать это, должны создать цикл, который проходит индекс zip-файла, чего-то вроде этого:
for i in $(unzip -l zipfile.zip); do
# look for specific location
# when there, make directory structure you want
# unzip zipfile.zip $i -d /some/tmp/dir
# move file from /some/tmp/dir to new directory
done
Вышеупомянутое может быть сделано на многих языках программирования, таких как Perl, Python, и т.д.
Другой метод включает создание копии zip-файла и затем использования инструмента zipnote
чтобы управлять индексом файлов в архиве и затем извлечь файлы однажды, индексом zip-файла управляли.
Если, с другой стороны, Вы просто пытаетесь извлечь единственную папку из zip-файла, можно использовать эту команду, чтобы сделать так:
$ unzip "/path/to/archive.zip" "in/archive/folder*" -d "/path/to/unzip/to"
Демонстрационная структура каталогов.
$ tree
.
|-- 1
| |-- 2
| | |-- 3
| | | `-- 4
| | | `-- 5
| | | |-- file1
| | | |-- file2
| | | |-- file3
| | | |-- file4
| | | `-- file5
| | `-- afile
| `-- afile
`-- afile
Заархивированный.
$ zip -r ../afile.zip .
adding: afile (stored 0%)
adding: 1/ (stored 0%)
adding: 1/afile (stored 0%)
adding: 1/2/ (stored 0%)
adding: 1/2/afile (stored 0%)
adding: 1/2/3/ (stored 0%)
adding: 1/2/3/4/ (stored 0%)
adding: 1/2/3/4/5/ (stored 0%)
adding: 1/2/3/4/5/file1 (stored 0%)
adding: 1/2/3/4/5/file2 (stored 0%)
adding: 1/2/3/4/5/file3 (stored 0%)
adding: 1/2/3/4/5/file5 (stored 0%)
adding: 1/2/3/4/5/file4 (stored 0%)
Подтверждение содержания zip-файла.
$ unzip -l ../afile.zip
Archive: ../afile.zip
Length Date Time Name
--------- ---------- ----- ----
0 11-07-2013 16:43 afile
0 11-07-2013 16:43 1/
0 11-07-2013 16:43 1/afile
0 11-07-2013 16:43 1/2/
0 11-07-2013 16:43 1/2/afile
0 11-07-2013 15:51 1/2/3/
0 11-07-2013 15:51 1/2/3/4/
0 11-07-2013 15:51 1/2/3/4/5/
0 11-07-2013 15:51 1/2/3/4/5/file1
0 11-07-2013 15:51 1/2/3/4/5/file2
0 11-07-2013 15:51 1/2/3/4/5/file3
0 11-07-2013 15:51 1/2/3/4/5/file5
0 11-07-2013 15:51 1/2/3/4/5/file4
--------- -------
0 13 files
Теперь мы разархивировали просто папку 5.
$ unzip afile.zip "1/2/3/4/5*" -d new/
Archive: afile.zip
creating: new/1/2/3/4/5/
extracting: new/1/2/3/4/5/file1
extracting: new/1/2/3/4/5/file2
extracting: new/1/2/3/4/5/file3
extracting: new/1/2/3/4/5/file5
extracting: new/1/2/3/4/5/file4
Подтверждение разархивировало:
$ tree .
.
`-- 1
`-- 2
`-- 3
`-- 4
`-- 5
|-- file1
|-- file2
|-- file3
|-- file4
`-- file5