I'm trying to zip a directory (on Unix via SSH) but I need to exclude a couple of subdirectories (and all files and directories within them).
So far I have this:
zip -r myarchive.zip dir1 -x dir1/ignoreDir/**/* That doesn't seem to work though.
I also tried
zip -r myarchive.zip dir1 -x dir1/ignoreDir1/* dir1/ignoreDir2/*However that will still include subdirectories within ignoreDir1 and ignoreDir2.
The subdirectory structure in the directories that I want to exclude is quite substantial so I can't simply add each directory to the -x argument.
Does anyone know how to do this?
18 Answers
I was so close!
The actual command I need is:
zip -r myarchive.zip dir1 -x dir1/ignoreDir1/**\* dir1/ignoreDir2/**\* 5 For my particular system in order to exclude a directory I had to put quotes around my excluded directories and it worked like a charm:
zip -r myarchive.zip dir1 -x "dir1/ignoreDir1/*" "dir1/ignoreDir2/*"Notes:
-- this excluded both the directory to exclude and all files inside it.
-- You must use the full path to the directories you want to exclude!
6@sulman using:
zip -r myarchive.zip dir1 -x dir1/ignoreDir1/**\* dir1/ignoreDir2/**\*
will still include dir1/ignoreDir1/ empty folder in the zip archive, using:
zip -r myarchive.zip dir1 -x dir1/ignoreDir1** dir1/ignoreDir2**
will do the trick, you can also use a leading ** to search in subfolders instead of only dir1
1The following will do
zip -r myarchive.zip dir1 -x dir1/ignoreDir1\* dir1/ignoreDir2\*
What did you need the ** for, @sulman?
It works like a charm for me as follows:
[root@ip-00-000-000-000 dir1]# ls -lrt dir1/
total 16
drwxr-xr-x 2 root root 4096 Oct 31 07:38 ignoredir1
drwxr-xr-x 2 root root 4096 Oct 31 07:38 ignoredir2
drwxr-xr-x 2 root root 4096 Oct 31 07:39 dir3
-rw-r--r-- 1 root root 8 Oct 31 07:39 test.txt
[root@ip-00-000-000-000 temp]# zip -r dir1.zip dir1 -x dir1/ignoredir1\* dir1/ignoredir2\* adding: dir1/ (stored 0%) adding: dir1/dir3/ (stored 0%) adding: dir1/dir3/test3.txt (deflated 13%) adding: dir1/test.txt (stored 0%) 2 Just like other answers, but excluding directories entirely, instead of excluding all contents of directories:
zip -r myarchive.zip dir1 -x dir1/ignoreDir1/\* dir1/ignoreDir2/\* In Ubuntu Server this commands works for zip a file excluding some folders, but with a little differences:
If you wanna zip without keep empty folders:
zip -r myarchive.zip dir1 -x dir1/ignoreDir1/**\* dir1/ignoreDir2/**\*If you wanna zip keep empty folders:
zip -r myarchive.zip dir1 -x dir1/ignoreDir1\* dir1/ignoreDir2\*By example:
zip -r testtt.zip uploads/2013/ -x uploads/2013/03/**\* uploads/2013/04/**\*
zip -r testtt.zip uploads/2013/ -x uploads/2013/03\* uploads/2013/04\* I found this to work from David R Heffelfinger:
zip -r myarchive.zip dir1 -x dir1/ignoreDir1\* dir1\ignorDir2\*It excluded the directory and its contents.
1For me worked: zip -9 -r ~/folded.zip online -x folder/folder2/folder3/foldern/\*.
Seems to be that the asterisk must be escaped.
3