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 ?


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. – Kraang Prime Jan 8 '17 at 7:09

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

chmod all files recursively excluding folder

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 {} \;

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.