Якщо ви хочете зберегти всі файли 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
не зберігається символічні посилання.
-j
довідкових сторінок здається, що застосовується лише те , що стискає всі папки в єдиний каталог кореневого рівня в ZIP. Це не те, що ви шукаєте, чи не так?