20

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 2

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.

1
  • @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
    Commented Jan 15, 2011 at 0:12
10

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

2
  • @Gilles: Good point, I've added that to the answer.
    – sepp2k
    Commented Jan 15, 2011 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
    Commented Jan 15, 2011 at 4:51

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .