19

I have project with the usual directory structure (src/, bin/, ...), i.e

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

And would like to create an archive with the following directory structure:

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

Is there a neat way to do this, which avoids creating a temporary directory project-name/ elsewhere, then copying the files inside a finally calling zip -r ... on that temporary directory?

(I am basically looking for some kind of path prefix or relative path option.)

10

Maybe this already occurred to you, but why not just use a sym link rather than copy everything?

ln -s project-name project-name-version

then use zip -r through the sym link (zip will dereference sym links by default)? When you're done you can simply rm the sym link. Perhaps it's not the most elegant solution, but I don't know an obvious way to do it through zip directly.

2
  • 1
    This also works with tar if you use the -h flag. – Kyle Strand Sep 28 '16 at 1:18
  • (I'm also using the z flag; I'm not sure if that affects it.) – Kyle Strand Sep 28 '16 at 1:23
15

This is more an advice than an answer: use Git!

If you setup a Git repository for your project, the whole thing become quite straightforward:

git archive HEAD --prefix=project-name-version/ \
    --format=zip -o project-name-version.zip
8
  • 1
    Excellent advice, thank you. git archive documentation: git-scm.com/docs/git-archive – Meglio Jul 12 '15 at 4:53
  • 1
    While using version control is a good idea, this answer does not match the question for the generic case. – raimue Apr 20 '16 at 14:16
  • @Raim "This is more an advice than an answer: use Git!" written there since like 4 years, thank you for pointing it out... – cYrus Apr 20 '16 at 14:24
  • 1
    If this was not intended as an answer, it should be converted to a comment. – raimue Apr 20 '16 at 15:42
  • 1
    @Gregor I think that's a desirable behavior as such files are actually part of the project, anyway you can use Git attributes, e.g., create a file named .gitattributes containing .git* export-ignore. – cYrus Apr 8 '19 at 14:24

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.