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буде перенавантаження символьних посилань за замовчуванням)? Коли ви закінчите, ви можете просто rmпосилання sym. Можливо, це не найелегантніше рішення, але я не знаю очевидного способу це зробити 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
@Gregor Я думаю, що це бажана поведінка, оскільки такі файли насправді є частиною проекту, у будь-якому випадку ви можете використовувати атрибути Git, наприклад, створити файл, названий .gitattributesщо містить .git* export-ignore.
cYrus
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.