Ako chmod 755 všetky adresáre, ale žiadny súbor (rekurzívne) ?
A naopak, ako chmodovať len súbory (rekurzívne), ale žiadny adresár ?
Rekurzívne udelenie oprávnení adresárom na čítanie&spustenie:
find /path/to/base/dir -type d -exec chmod 755 {} +
Rekurzívne udelenie oprávnení na čítanie súborov:
find /path/to/base/dir -type f -exec chmod 644 {} +
Alebo, ak je potrebné spracovať veľa objektov:
chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)
Alebo na zníženie množenia chmod
:
find /path/to/base/dir -type d -print0 | xargs -0 chmod 755
find /path/to/base/dir -type f -print0 | xargs -0 chmod 644
Častým dôvodom takéhoto postupu je nastavenie adresárov na 755, ale súborov na 644. V tomto prípade existuje o niečo rýchlejší spôsob ako nikov príklad find
:
chmod -R u+rwX,go+rX,go-w /path
Význam:
-R
= rekurzívne;u+rwX
= Používatelia môžu čítať, zapisovať a vykonávať;go+rX
= skupina a ostatní môžu čítať a vykonávať;go-w
= skupina a ostatní nemôžu zapisovaťDôležité je poznamenať, že veľké písmená X
sa správajú inak ako malé písmená x
. V manuáli môžeme čítať:
Bity execute/search, ak je súbor adresárom alebo je niektorý z bitov execute/search nastavený v pôvodnom (nemodifikovanom) režime.
Inými slovami, chmod u+X na súbore nenastaví bit execute; a g+X ho nastaví len vtedy, ak už je'nastavený pre používateľa.
Ak sa chcete uistiť, že súbory sú nastavené na 644 a v ceste sú súbory s príznakom execute, musíte najprv odstrániť príznak execute. Príznak +X neodstráni príznak execute zo súborov, ktoré ho už majú.
Príklad:
chmod -R ugo-x,u+rwX,go+rX,go-w path
Aktualizácia: zdá sa, že to zlyháva, pretože prvá zmena (ugo-x) spôsobí, že adresár je nevykonateľný, takže všetky súbory pod ním sa nezmenia.