If you mistakenly chmod-ed all files within directory full of multiple other subdirectories and files and you want to revert back and set a certain file permissions (read, wite execute) privileges only to all directories:
find /path/to/base/dir -type d -exec chmod 755 {} +
If there are too many files or directories you need to change mod use
chmod 755 $(find /path/to/base/dir -type d) chmod 644 $(find /path/to/base/dir -type f)
Above willl run evaluate $() all files searched and print them and pass them to chmod so if you have too many files / directories to change it will drastically reduce execution time.
An alternative and perhaps a better way to do it for those who don't remember by heart the chmod permission (numbers), use something like:
chmod -R u+rwX,go+rX,go-w /path
Below is arguments meaning:
-R = recursively;
u+rwX = Users can read, write and execute;
go+rX = group and others can read and execute;
go-w = group and others can't write
If like piping, a less efficient but still working way to change all directory permissions only is with:
find /path/to/base/dir -type d -print0 | xargs -0 chmod 755
find /path/to/base/dir -type f -print0 | xargs -0 chmod 644
For those who wish to automate and often do change permissions of only files or only directories it might be also nice to look at (chmod_dir_files-recursive.sh) shell script
Tadadam 🙂