77

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

Braiam
  • 67,791
  • 32
  • 179
  • 269
arpho
  • 881

7 Answers7

65

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

D-E-N
  • 1,624
  • 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 07 '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
  • -x app/bower_components/* -x node_modules/* doesn work for me why? – jw_ Jan 13 '20 at 03:18
  • zip -r zipped.zip . -x "public/*" This is what worked for me after adding quotes – Gpak Jan 18 '22 at 08:03
34

exclude all node_modules folders in all folders.

zip -r node.zip . -x "**/node_modules/*"
x-magix
  • 441
24

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
14

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.

MikeiLL
  • 923
  • 1
  • 7
  • 10
3

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*"
Tarik
  • 215
1

In the folder you want to be zipped:

zip -r abc.zip . -x "node_modules/**" -x "*.git/**" 
ThunderBird
  • 1,955
1

in every project skip node_modules like this:

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