Linux: Указание директории верхнего уровня при создании zip-архива


17

У меня есть проект с обычной структурой каталогов (src /, bin /, ...), т.е.

project-name/
|-- bin
|-- lib
|-- src
`-- Makefile

И хотел бы создать архив со следующей структурой каталогов:

project-name-version/
|-- bin
|-- lib
|-- src
`-- Makefile

Есть ли удобный способ сделать это, чтобы избежать создания временного каталога в project-name/другом месте, а затем копировать файлы внутри окончательного вызова zip -r ...этого временного каталога?

(Я в основном ищу какой-то префикс пути или параметр относительного пути.)

Ответы:


9

Может быть, это уже произошло с вами, но почему бы просто не использовать ссылку sym, а не копировать все?

ln -s project-name project-name-version

затем использовать zip -rчерез ссылку sym ( zipбудет ли разыменовываться ссылка sym по умолчанию)? Когда вы закончите, вы можете просто rmссылку сим. Возможно, это не самое элегантное решение, но я не знаю очевидного способа сделать это zipнапрямую.


1
Это также работает, tarесли вы используете -hфлаг.
Кайл Стрэнд,

(Я также использую zфлаг; я не уверен, влияет ли это на него.)
Кайл Стрэнд,

15

Это скорее совет, чем ответ: используйте Git !

Если вы настроите Git- репозиторий для своего проекта, все станет довольно просто:

git archive HEAD --prefix=project-name-version/ \
    --format=zip -o project-name-version.zip

1
Отличный совет, спасибо. мерзавец архив документации: git-scm.com/docs/git-archive
MEGLIO

1
Хотя использование контроля версий является хорошей идеей, этот ответ не соответствует вопросу для общего случая.
Райму

@Raim "Это скорее совет, чем ответ: используйте Git!" написано там уже 4 года, спасибо, что указали на это ...
cYrus

1
Если это не было предназначено как ответ, это должно быть преобразовано в комментарий.
Райму

1
@ Грегор Я думаю, что это желательное поведение, поскольку такие файлы на самом деле являются частью проекта, в любом случае вы можете использовать атрибуты Git, например, создать файл с именем, .gitattributesсодержащим .git* export-ignore.
cyrus
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.