Zip файл без включения родительского каталога


12

У меня есть папка, которая содержит несколько файлов

папка

  • artifact1.app
  • artifact2.ext2
  • artifact3.ext3
  • ...

Моя цель - заархивировать файл из-за пределов этой папки (без использования cdкоманды), не включая папку dir.

zip -r ./folder/artifact.zip ./folder/artifact1.app

Эта команда включает папку dir в последний zip. Есть намеки?

Смежный вопрос: архивировать содержимое папки, не включая саму папку


1
Из -jсправочных страниц кажется, что это применимо только для того , чтобы сжать все папки в один корневой каталог внутри ZIP. Это не то, что вы ищете, не так ли?
phyrfox

@phyrfox Возможно да. Нужно проверить это. Спасибо.
Лоренцо Б

Ответы:


13

Если вы хотите сохранить все файлы folderпод своим именем без указания каталога, вы можете использовать эту -jопцию.

zip -j folder/artifact.zip folder/artifact1.app folder/artifact2.ext2 folder/artifact3.ext3

или

zip -j folder/{artifact.zip,artifact1.app,artifact2.ext2,artifact3.ext3}

Если у вас есть файлы в подкаталогах, у них также не будет никакого компонента каталога в архиве, например, folder/subdir/fooони будут сохранены в архиве как foo.

Но, вероятно, было бы легче перейти в каталог. Это почти то же самое количество печатания, что и у метода скобок. Если вы сделаете это, если вы включите файлы в подкаталоги, у них будет относительный путь к каталогу, в который вы перешли, например, folder/subdir/fooони будут сохранены как subdir/foo.

(cd folder && zip artifact.zip artifact1.app artifact2.ext2 artifact3.ext3)

Для интерактивного использования вы теряете завершение оболочки таким образом, потому что оболочка не понимает, что вы будете находиться в другом каталоге при запуске zipкоманды. Чтобы исправить это, введите cdкоманду отдельно. Чтобы легко вернуться к предыдущему каталогу, вы можете использовать pushdи popd.

pushd folder
zip artifact.zip artifact1.app artifact2.ext2 artifact3.ext3
popd

Если вы хотите получить полный контроль над путями, хранящимися в zip-файле, вы можете создать лес символических ссылок. Если не указано иное, zipне хранит символические ссылки.


Вам не нужно явно перечислять все файлы в подкаталоге ( folder), вы можете просто использовать подстановочный знак, то естьzip -j folder/*
Jakub Kukul

Использование расширения оболочки означает, что точечные файлы (например .profile) не будут включены в архив. Вместо этого измените текущий рабочий каталог и укажите .в качестве файла для архивирования:cd folder && zip -r ../folder.zip .
sheldonh
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.