How to chmod and chown hidden files in Linux?

35

8

How do I recursively execute chmod or chown for hidden files?

sudo chmod -R 775 * does not work on hidden files.

The same thing goes for sudo chown -R user:group.

nothing-special-here

Posted 2011-10-12T13:09:41.423

Reputation: 605

Answers

37

If you're okay also chmod'ing the current directory, do that and let -R do the heavy lifting. -R does not ignore hidden files.

sudo chmod -R 775 .

John Kugelman

Posted 2011-10-12T13:09:41.423

Reputation: 1 620

Even though in linux you have the ability to change the order of args for chmod, when doing x-plat scripts between linux and OS X, this is the order you should use, e.g., sudo chmod 775 -R would go belly-up, so stick to this answer. – kayleeFrye_onDeck – 2016-06-17T18:30:13.197

14This (* .*) is not the safest way to do it. Particularly, it would recurse into parent directory, which means it chmods also siblings of the current directory. The proper way would be * ..?* .[^.]* or, even better (considering the wildcards might not match any files) $(ls -A). – jpalecek – 2011-10-12T13:34:32.277

1@jpalecek: The output of ls is unparseable; trying to parse it is asking for trouble. The proper approach is to use shell globbing. – Scott Severance – 2011-12-11T17:58:47.377

35

* doesn't include hidden files by default, but if you're in bash, you can do this with:

shopt -s dotglob

Read more about it in bash's builtin manual:

If set, Bash includes filenames beginning with a `.' in the results of filename expansion.

This will make * include hidden files too.

chmod -R 775 *

Disable it with:

shopt -u dotglob

slhck

Posted 2011-10-12T13:09:41.423

Reputation: 182 472

2How to do that in zsh ? – nothing-special-here – 2014-10-25T13:57:15.320

2You use the (D) globbing qualifier, e.g. chmod -R 775 *(D) – slhck – 2014-10-25T14:39:06.490

2

Another option is to use find i like it since you can have very fine grained control over it.

find <path to start from> -exec chown <options> {} \+

find -path '<path to include>' -exec chown <options> {} \+

The only downside is that find has different syntax on different versions.

RedX

Posted 2011-10-12T13:09:41.423

Reputation: 291

2

All files in the current directory, recursively, including hidden files:

chmod 755 -R ./* ./.[!.]*

All files in the current directory, not recursively, including hidden files:

chmod 755 ./* ./.[!.]*

This will not change an exception filename starting with 2 dots, as example, "./..thisonescapesunharmed.txt"

Also, be carefull not to remove the "x" bit, or else all your directories will not be accessible (one needs the x bit to cd into a dir).

Remember this alert: never use bare * but ./* instead.

To avoid problems setting permissions on directories, use find instead.

find . -type f -exec chmod `VALUE` {} \;

Dr Beco

Posted 2011-10-12T13:09:41.423

Reputation: 1 277