Как извлечь только определенную папку из архива в данный каталог?

59

Как извлечь конкретную папку из архива в заданный каталог?

Я пытался с помощью

unzip "/path/to/archive.zip" "in/archive/folder/" -d "/path/to/unzip/to"

но это только создает папку на пути, к которому я хочу ее разархивировать, и больше ничего не делает.

Enkouyami
источник

Ответы:

60
unzip <target-zip-file> '<folder-to-extract/*>' -d <destination-path> 

отлично работает на EL 6

Сью
источник
3
что это за EL 6?
Зельда
2
Корпоративный Linux 6 (RHEL6) - Red Hat.
SLM
Это тоже работает; это в основном тот же ответ, что и у Марка Адлера, но немного по-другому.
Enkouyami
@Enkouyami Минус различия в цитировании, похоже, то же самое.
Камило Мартин
1
@Enkouyami Поскольку обратная косая черта в двойных кавычках экранирует символ (предположительно, звездочка экранирована, но я думаю, что это опечатка), тогда как в одинарных кавычках обратная косая черта не интерпретируется. Если кто-то хочет получить обратную косую черту в буквальном смысле, "\\"будет использоваться (иначе вы всегда должны помнить, какие символы являются специальными escape-символами). Так что разница в цитировании, если автор имел в виду «цитирование глобуса» (не нужно). В любом случае, такая обратная косая черта - это опечатка.
Камило Мартин
39

Пытаться:

unzip /path/to/archive.zip 'in/archive/folder/*' -d /path/to/unzip/to
Марк Адлер
источник
4
сделал это? Я получаю, caution: filename not matched: foldername/\*когда я запускаю, unzip $repozip "$2-master/\*" -d /srv/www/magento/где $2находится имя папки в zip, я хочу вытащить все файлы и папки из
jeremy.bass
10
Работал без \, просто "path/*".
Алекс
8
Есть ли способ извлечь содержимое «в / archive / folder / *», которое не сохраняет путь «в / archive / folder /»? Я использую mvпотом, чтобы получить файлы там, где они мне нужны.
Jerrygarciuh
6
Используйте -jдля этого.
Марк Адлер
4
-jудаляет всю информацию о пути, и все файлы попадают в целевую папку. Есть ли способ удалить только общую часть пути? Сродни молнии -r.
Боб Стейн
6

Существующие два ответа являются правильными, но немного сложнее указать целевой каталог, который следует уточнить.

Скажем, /target/root/является целевым каталогом для исходного действия распаковки, например:

unzip -qq src.zip -d "/target/root/"

Затем нам нужно использовать то же самое, /target/root/что и целевой dir, даже если мы хотим извлечь только конкретный подкаталог, как работает unzip:

unzip -qq src.zip "sub/dir/*" "/target/root/"

В конце концов, правило на самом деле простое, используйте тот же целевой корневой каталог для этой -dопции .

Кстати, -qqопция для распаковки должна быть очень тихой, не стесняйтесь удалить ее.

ryenus
источник
К вашему сведению: я сделал <kbd> unzip -qq 2.3.zip "magento2-2.3 / vendor / *" "vendor /" </ kbd> и получил <kbd> предупреждение: имя файла не совпадает: vendor / `</ kbd>. Это на Ubuntu установить в Bash. Я редко расстегиваю молнию, вероятно, сделал что-то еще не так ...
Крис К