How do I make the directories in a zip file relative to the target directory instead of my working directory
As you note in the comments you now know how to change directory with your script, I'll explain the situation with zip regarding relative paths.
It is probably easiest to open terminal and cd
to kit123
; you have to make the target directory your working directory- you can't run the command from the base of your home directory or it will pick up all the paths of /home/$USER/..
If you use the -j
option, it will strip out all paths, as there isn't really an equivalent of the tar option --strip
with which different levels of path removal can be specified.
So please cd to your target directory (kit123
) and enter:
zip -r kit123.zip *
This will recursively (-r
) preserve all (*
) files and directories of files in the current directory (kit123
), and as relative paths (-p
) are preserved automatically unless the -j
option is present, the directory structure will be as you wished. Kit123
and subfolders (kitpart1
) with their own files will be present:
kit123
kitpart1
file.xcf
anotherfile.xcf
kitpart2
You can check the contents of the zip file with unzip -l zipfile.zip
.
For more information on the other options available for zip
, see man zip
and the Ubuntu manpage online.
Tormyst
If you can do a half-assed job of anything, you're a one-eyed man in a kingdom of the blind. - Kurt Vonnegut
Updated on November 23, 2022Comments
-
Tormyst over 1 year
I'm calling the zip command from a script where I cannot change directory. I need to make a zip file of the stuff in
data/kit123/
from the directory which data resides in, but I want the contents of the zip to only be the contents ofkit123
, with paths relative tokit123
.This is the directory structure
myworkingdir data kit123 kitpart1 file.xcf anotherfile.xcf kitpart2 ... kit124 ...
My script runs in myworkingdir and cannot change directories.
If I call
zip -r kit123.zip data/kit123
then the structure in the zip file will be
data kit123 kitpart1 file.xcf anotherfile.xcf kitpart2
but I want it to be
kit123 kitpart1 file.xcf anotherfile.xcf kitpart2
Is there a zip option I can use to accomplish this? It seems odd that it should depend on my working directory
I know it's not -j. that one destroys the structure within kit123
-
Admin over 11 yearsBah, nevermind I did figure out how to change dir (in Python) I just had a poorly organized permissions. I'd still like to know if zip has such an option though.
-
Admin almost 6 yearsPython
zipfile.write(arcname=
allows it btw: docs.python.org/3.6/library/zipfile.html#zipfile.ZipFile.write
-