Если вы хотите сохранить все файлы 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
не хранит символические ссылки.
-j
справочных страниц кажется, что это применимо только для того , чтобы сжать все папки в один корневой каталог внутри ZIP. Это не то, что вы ищете, не так ли?