Avoid unwanted path in Zip file
Your script should use cd
or pushd
and popd
to move into the directory that will be the root of the archive before issuing the zip
command. How you do this exactly will depend on how the script knows what to zip up. But, if you want /Users/me/development/something/folder zipped with internal paths of just ./folder, you'd need to do this:
pushd /Users/me/development/something
zip -r /path/to/out.zip ./folder/
popd
That will result in your out.zip containing the relative paths you want.
If you need assistance with scripting that, you'll need to show us your script.
The problem is that the resultant out.zip archive has the entire file path in it.
...
Is it possible to avoid these deep paths when putting a directory into an archive?
Yes. Use the -j
option with zip
. -j
is "junk the path". According to the man page on zip:
Store just the name of a saved file (junk the path), and do not store directory names. By default, zip will store the full path (relative to the current directory).
Using -j
means the following command:
zip -j myarchive.zip file1.txt dir1/file2.txt dir2/dir3/file3.txt ../file4.txt
Will create an archive that looks like:
myarchive.zip
|
+-- file1.txt
+-- file2.txt
+-- file3.txt
+-- file4.txt
There is pushd
and popd
and $OLDPWD
. Assuming the $PWD
is /Users/me/development
do:
pushd something/folder
zip -r $OLDPWD/something/out.zip *
popd
Now the $PWD
is back to /Users/me/development