45

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
47

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

| improve this answer | |
  • 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
  • -x app/bower_components/* -x node_modules/* doesn work for me why? – jw_ Jan 13 at 3:18
13

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
| improve this answer | |
8

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.

| improve this answer | |
  • 1
    Now that I know the **\* is for recursive exclusion. Many thanks. – Duc Tran Mar 9 '17 at 23:31
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*"
| improve this answer | |
3

exclude all node_modules folders in all folders.

zip -r node.zip . -x "**/node_modules/*"
| improve this answer | |
  • 1
    Thank you. This is the only answer that really works. – Theodore R. Smith Jan 6 at 18:54
1

in every project skip node_modules like this:

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

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.