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?

Mikel
  • 57,299
  • 15
  • 134
  • 153
Ivan
  • 17,708

2 Answers2

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.

ewindisch
  • 676
  • @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 00: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).

sepp2k
  • 5,597
  • @Gilles: Good point, I've added that to the answer. – sepp2k Jan 15 '11 at 00: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 04:51