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


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.