After I apply chmod -R
to a directory, permissions are changed for everything within (files and directories). How can I add execute/search (x
) permissions to directories without modifying the files?
2 Answers
You can use find.
find ./ -type d -execdir chmod 750 {} +
Where 750 is the mode you'd like to apply and "./" is the directory you will recursively search.
EDIT: Thanks to @Gilles and find(1), I've revised this for additional security and performance.
-
@Gilles Thanks, it isn't too frequent that I learn something new about Unix tools :-) That is awesome. Also, now reading the find documentation, one should really use -execdir instead. Commented Jan 15, 2011 at 0:12
In this particular case you can use X
instead of x
which only adds the bits to directories or files which already have the executable bit set for some user (i.e. chmod -R +X my_dir
).
In general (e.g. if you wanted to make all directories readable without affecting the files), you could either use find
with -type d
or if you're using zsh (or bash 4 with shopt -s globstar
) the **/
glob (both without passing the -R
flag to chmod
).
-
-
1"use X instead of x which only adds the bits to directories or files which already have the executable bit set for some user" - Thanks! I've missed this thing a lot!– IvanCommented Jan 15, 2011 at 4:51