257

How can I recursively chmod everything inside of a folder?

e.g. I have a folder called var which contains many subfolders and files.

How can I apply chmod 755 recursively to this folder and all its contents?

Black
  • 8,671

7 Answers7

355

Please refer to the manual (man chmod):

-R, --recursive
change files and directories recursively

chmod -R 755 /path/to/directory would perform what you want.

However…

  1. You don't usually want to 755 all files; these should be 644, as they often do not need to be executable. Hence, you could do find /path/to/directory -type d -exec chmod 755 {} \; to only change directory permissions. Use -type f and chmod 644 to apply the permissions to files.

  2. This will overwrite any existing permissions. It's not a good idea to do it for /var — that folder has the correct permissions set up by the system already. For example, some directories in /var require 775 permissions (e.g., /var/log).

So, before doing sudo chmod — particularly on system folders — pause and think about whether that is really required.

slhck
  • 235,242
54

For a PHP-based web site, many sources like this one recommend 755 for directories and 644 for files.

If you are in the DocumentRoot of the website, you can set this as follows:

find . -type d -exec chmod 755 {} \;

find . -type f -exec chmod 644 {} \;

9

If you wish to apply chmod to a specific directory/ file you can make use of find as following:

find . -type f -name "*.sh" -print0 |xargs -0 chmod 755
Vishrant
  • 297
1

To set the rights for all files (to 644) and all directories (to 755) in your directory YOUR_CATALOG at once you can use this:

find YOUR_CATALOG -type f -exec chmod 664 {} + -o -type d -exec chmod 775 {} +
Kornel
  • 119
0

You can give all permission for your localhost

sudo chmod -R goa=rwx /path/to/directory
MD SHAYON
  • 109
0

Perhaps the 775 for folders and 664 for files-the better for development. As they keep the developer permission (if developer is member of www-data group) to change files and make possible to works with the developer's login not with user www-data only. So..

If you are in the DocumentRoot of the website, better use this:

find . -type d -exec chmod 775 {} ;

find . -type f -exec chmod 664 {} ;

Add a new user named foo to www-data group by running useradd -g www-data foo command

Andrey
  • 1
0

Giving the execute x permission to all random files is not good from security perspective. You'd want to have rwx on directories and rw- on files.

Use capital X to achieve this: it only applies to folders and not files:

$ chmod -R a+rwX *

This won't remove x on files if they already have it.

kolypto
  • 3,121