32

I, need to zip a directory excluding some subdirectory and file; I used this:

zip -r zipfile.zip . -x ".*" -x "app/bower_components" -x "node_modules" -x "*.zip" -x "node_modules"

without any success; node_modules is a folder in the principal one while bower_components is inside the folder app

  • what is your result and what are your expected result? – D-E-N Nov 5 '13 at 17:57
  • You want to exclude all subdirectories or only some of them ? – Sergiy Kolodyazhnyy Jun 10 '15 at 17:16
36

I simply make a guess what you want.

-x ".*"

exclude all files beginning with a dot

do it like:

-x .\*

exclude all files (with a dot in the filename)

do it like:

-x \*.\*

--

-x "app/bower_components" -x "node_modules"

exclude this directory and all files in it

do it like:

-x app/bower_components/\* -x node_modules/\*

--

-x "*.zip"

exclude all zip-Files

do it like:

-x \*.zip

You exclude node_modules twice

  • 2
    thanks I got it, using various post arrived to that: zip -r * app/* -x\app/bower_components/* -x\node_modules/* -x*.zip – arpho Nov 7 '13 at 15:34
  • @arpho Your comment above should be an answer as it appears to be working for me... – chesedo Jun 22 '16 at 11:48
6

Something like this should do the trick:

zip -r zipped.zip dir1/ -x */\.* *.git* \.* *.zip *.csv *.json *.rb *.bak *.swp *.back *.merge *.txt *.sh dir1/node_modules/**\* dir1/bower_components/**\* dir1/dist/**.*

Where following -x is a list of directories and file (extension) types to exclude.

  • Now that I know the **\* is for recursive exclusion. Many thanks. – Duc Tran Mar 9 '17 at 23:31
6

Assuming your directory is a git repository (and judging by the question, it very likely is), you can add directories that you want to exclude to the .gitignore file and use the git archive command to zip contents of your directory:

git archive --format=zip HEAD -o zipfile.zip

In your example, the .gitignore file would have to look like this:

node_modules
app/bower_components
2

This works perfect for me on Ubuntu 16.04:

sudo zip -r /home/user/backup/$(date +"%Y-%m-%d")/home_user.zip /home/user -x "*backup*" -x "*.cache*" -x "*test*"
0

in every project skip node_modules like this:

for i in */; do zip -r "${i%/}.zip" "$i" -x "*/\node_modules/*" ; done

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.