Hoe chmod 755 alle directories maar geen bestand (recursief) ?
Omgekeerd, hoe alleen bestanden chmodem (recursief) maar geen directory ?
Om recursief directories lees&execute rechten te geven:
find /path/to/base/dir -type d -exec chmod 755 {} +
Om recursief bestanden leesbevoegdheid te geven:
find /path/to/base/dir -type f -exec chmod 644 {} +
Of, als er veel objecten te verwerken zijn:
chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)
Of, om chmod
spawnen te verminderen:
find /path/to/base/dir -type d -print0 | xargs -0 chmod 755
find /path/to/base/dir -type f -print0 | xargs -0 chmod 644
Een veel voorkomende reden voor dit soort dingen is om directories op 755 te zetten maar bestanden op 644. In dit geval is er een iets snellere manier dan nik's find
voorbeeld:
chmod -R u+rwX,go+rX,go-w /path
Betekenis:
-R
= recursief;u+rwX
= gebruikers kunnen lezen, schrijven en uitvoeren;go+rX
= groep en anderen kunnen lezen en uitvoeren;go-w
= groep en anderen kunnen'niet schrijvenHet belangrijkste om hier op te merken is dat hoofdletter X
anders werkt dan kleine letters x
. In handleiding kunnen we lezen:
De execute/search bits als het bestand een directory is of een van de execute/search bits zijn ingesteld in de originele (ongewijzigde) modus.
Met andere woorden, chmod u+X op een bestand zal'niet de execute bit zetten; en g+X zal het alleen zetten als het'al gezet is voor de gebruiker.
Als je er zeker van wilt zijn dat de bestanden op 644 staan en er staan bestanden in het pad die de execute vlag hebben, dan moet je eerst de execute vlag verwijderen. +X verwijdert niet de execute vlag van bestanden die het al hebben.
Voorbeeld:
chmod -R ugo-x,u+rwX,go+rX,go-w path
Update: dit lijkt te mislukken omdat de eerste wijziging (ugo-x) de directory onuitvoerbaar maakt, dus alle bestanden eronder worden niet gewijzigd.