18

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?

13

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. – ewindisch Jan 15 '11 at 0:12
6

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).

  • @Gilles: Good point, I've added that to the answer. – sepp2k Jan 15 '11 at 0:12
  • 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! – Ivan Jan 15 '11 at 4:51

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.