У меня есть папка, которая содержит несколько файлов
папка
- artifact1.app
- artifact2.ext2
- artifact3.ext3
- ...
Моя цель - заархивировать файл из-за пределов этой папки (без использования cd
команды), не включая папку dir.
zip -r ./folder/artifact.zip ./folder/artifact1.app
Эта команда включает папку dir в последний zip. Есть намеки?
Смежный вопрос: архивировать содержимое папки, не включая саму папку
-j
справочных страниц кажется, что это применимо только для того , чтобы сжать все папки в один корневой каталог внутри ZIP. Это не то, что вы ищете, не так ли?Ответы:
Если вы хотите сохранить все файлы
folder
под своим именем без указания каталога, вы можете использовать эту-j
опцию.или
Если у вас есть файлы в подкаталогах, у них также не будет никакого компонента каталога в архиве, например,
folder/subdir/foo
они будут сохранены в архиве какfoo
.Но, вероятно, было бы легче перейти в каталог. Это почти то же самое количество печатания, что и у метода скобок. Если вы сделаете это, если вы включите файлы в подкаталоги, у них будет относительный путь к каталогу, в который вы перешли, например,
folder/subdir/foo
они будут сохранены какsubdir/foo
.Для интерактивного использования вы теряете завершение оболочки таким образом, потому что оболочка не понимает, что вы будете находиться в другом каталоге при запуске
zip
команды. Чтобы исправить это, введитеcd
команду отдельно. Чтобы легко вернуться к предыдущему каталогу, вы можете использоватьpushd
иpopd
.Если вы хотите получить полный контроль над путями, хранящимися в zip-файле, вы можете создать лес символических ссылок. Если не указано иное,
zip
не хранит символические ссылки.источник
folder
), вы можете просто использовать подстановочный знак, то естьzip -j folder/*
.profile
) не будут включены в архив. Вместо этого измените текущий рабочий каталог и укажите.
в качестве файла для архивирования:cd folder && zip -r ../folder.zip .