Unix – Recursively chmod only directories or files


Have you ever come across the problem of needing to chmod many directories and sub-directories, but you don’t want to touch any of the files? Maybe it’s the exact opposite, or you need to recursively change the permissions on only files with a specific extension. If so, this article is for you

To change permission of all directories to 755, execute this command in terminal

find . -type d -exec chmod 755 {} \;

This will “find” all directories, starting at “.“, and chmod them to 755.

The following snippet does the opposite and finds only files. The difference (beside the file permissions) is the “-type f“, “f” specifies files and “d” directories.

find . -type f -exec chmod 644 {} \;

Here are some other commands that you can build base on previous

find . -type f -name '*.htm*' -exec chmod 644 {} \;

This lets you “find” files (“-type f“) with a specific extension (“-name ‘*.htm*’“) and chmod them with your desired permission (“-exec chmod 644 {}“).

chmod -R o+rX

This snippet will recursively chmod “other” (“o“) permissions with read/eXecutable (“+rX“), and the capital X ensures that directories and files set (user/group permissions) to executable will be properly modified, while ignoring regular (non-executable) files.