18

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

zip -r myzipfile.zip mydir (-option to expand into 'projx' when unzipped? )

3 ответа3

16

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

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

3

Для этого есть другой способ. Вы можете расправить все содержимое 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 .

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .