I would like to chmod all folders and subfolders within a specific folder, except I wish to exclude one folder (and all subfolders it contains).

What I have so far is a hack of the following solutions from StackOverflow:

Here is what I came up with so far:

find . -type d \( -path ./node_modules \) -prune -o -print -exec chmod 644 {}\;

The problem is with or without -print I receive the following error :

find: missing argument to `-exec'

The following line has the expected results I need -exec chmod 644{}\; to read from:

find . -type d \( -path ./node_modules \) -prune -o -print

What am I missing on that line to pipe the data to -exec ?

3 Answers 3


Remove -print, escape ( and ) and add space after {}

find . -type d \( -path ./node_modules \) -prune -o -exec chmod 644 {} \;
  • Your solution worked. Thank you. I was in the middle of writing my solution when you posted this. Accepting as solution and upvoted. Jan 8, 2017 at 7:09

After some playing around, I found that the following worked for me:

chmod all files recursively excluding files:

find . -not -path "*/node_modules*" -type f -exec chmod 644 {} \;

chmod all folders recursively excluding folder:

find . -not -path "*/node_modules*" -type d -exec chmod 755 {} \;

chmod all folders recursively find /opt/git/ -type d -exec chmod 755 {} +

chmod all files recursively find /opt/git/ -type f -exec chmod 755 {} +

Luiz Marinho


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .