как указать разархивировать целевой каталог

21

Есть ли опция в команде linux zip, чтобы я мог жестко запрограммировать целевой каталог, в который она распаковывается. Например, я хотел бы заархивировать файлы ./mydir в myzipfile.zip, но я хочу, чтобы команда unzip создала конкретный каталог «projx» и развернула файлы, находящиеся в ./mydir, в него.

zip -r myzipfile.zip mydir (-option to expand into 'projx' when unzipped? )
seedhom
источник
В Unix: unix.stackexchange.com/questions/12686/…
Сиро Сантилли 事件 改造 中心 法轮功 六四 事件

Ответы:

18

Такой опции нет, по крайней мере, для Info-ZIP. Вы должны сами создать каталог projx , переместить / скопировать в него свои файлы и затем передать его zip.

Если каталог уже существует , то просто передать параметр , -dчтобы , unzipчтобы указать целевую папку для извлечения.

SCAI
источник
4

Для этого есть другой способ. Вы можете расправить все содержимое zip-файла, используя следующий метод. Целевым каталогом является « projx » и выполните следующую команду.

cd /projx && unzip -j /path/to/myzipfile.zip

Опция -j называется «ненужными путями» и просто выгружает каждый файл в текущий каталог вместо извлечения какой-либо структуры каталога.

Чаминда Бандара
источник
0

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

ln -s mydir projx
zip -r myzipfile.zip projx
rm projx

Первая команда создает символическую ссылку, так что вы можете получить доступ к файлам mydirтакже через projx. Затем с использованием Info-ZIP(протестировано с версией 2.31) символьная ссылка разыменовывается (это значение по умолчанию, если вы не укажете -y), и файлы сохраняются рекурсивно:

adding: projx/ (stored 0%)
adding: projx/foo.1 (deflated 23%)
adding: projx/bar.2 (deflated 73%)
...

Видите ли, имя папки также хранится в файле - поэтому при извлечении каталог projxсоздается.

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

МРУ
источник
Абсолютный путь работает только в MacOS, указав параметр -jj. В других операционных системах -jподдерживается только опция (и -jjинтерпретируется как -j), которая удаляет любой ведущий путь и, следовательно, ведет к противоположному (очень умный дизайн ...).
Scai