Linux: Specifying top level-directory when creating zip archive
Solution 1
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.
Solution 2
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
Related videos on Youtube
leden
Updated on September 18, 2022Comments
-
leden over 1 year
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 callingzip -r ...
on that temporary directory?(I am basically looking for some kind of path prefix or relative path option.)
-
Meglio almost 9 yearsExcellent advice, thank you. git archive documentation: git-scm.com/docs/git-archive
-
raimue about 8 yearsWhile using version control is a good idea, this answer does not match the question for the generic case.
-
cYrus about 8 years@Raim "This is more an advice than an answer: use Git!" written there since like 4 years, thank you for pointing it out...
-
raimue about 8 yearsIf this was not intended as an answer, it should be converted to a comment.
-
Kyle Strand over 7 yearsThis also works with
tar
if you use the-h
flag. -
Kyle Strand over 7 years(I'm also using the
z
flag; I'm not sure if that affects it.) -
Gregor about 5 yearsI think that the downside of using
git archive
is that files like .gitignore go into the created archive, as well. Does anybody know a remedy? -
cYrus about 5 years@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
. -
Gregor about 5 yearsThank you, @cYrus, good solution. My goal was to make source code publicly available, in which case you do not want those files included.
-
user almost 4 yearsDoes this recursively include initialized submodules?