Wie wende ich rekursiv chmod-Verzeichnisse an, ohne dass sich dies auf Dateien auswirkt?

18

Nachdem ich mich chmod -Rauf ein Verzeichnis beworben habe, werden die Berechtigungen für alle darin enthaltenen Elemente (Dateien und Verzeichnisse) geändert. Wie kann ich Execute / Search ( x) - Berechtigungen zu Verzeichnissen hinzufügen, ohne die Dateien zu ändern?

Ivan
quelle

Antworten:

13

Sie können find verwenden .

find ./ -type d -execdir chmod 750 {} +

Wobei 750 der Modus ist, den Sie anwenden möchten, und "./" das Verzeichnis ist, in dem Sie rekursiv suchen.

EDIT : Dank @Gilles und find (1) habe ich dies für zusätzliche Sicherheit und Leistung überarbeitet.

ewindisch
quelle
@ Gilles Danke, es kommt nicht allzu oft vor, dass ich etwas Neues über Unix-Tools lerne :-) Das ist großartig. Wenn Sie jetzt die Find- Dokumentation lesen , sollten Sie stattdessen wirklich -execdir verwenden.
ewindisch
7

In diesem speziellen Fall können Sie Xanstelle xdessen nur die Bits zu Verzeichnissen oder Dateien hinzufügen, für die das ausführbare Bit für einen bestimmten Benutzer (dh chmod -R +X my_dir) bereits gesetzt ist.

Im Allgemeinen (z. B. wenn Sie alle Verzeichnisse lesbar machen möchten, ohne die Dateien zu beeinflussen) können Sie entweder findmit -type doder mit zsh (oder mit bash 4 shopt -s globstar) den **/Glob verwenden (beide ohne das -RFlag an zu übergeben chmod).

sepp2k
quelle
@ Gilles: Guter Punkt, das habe ich zur Antwort hinzugefügt.
15.
1
"verwende X anstelle von x, wodurch nur die Bits zu Verzeichnissen oder Dateien hinzugefügt werden, für die das ausführbare Bit für einige Benutzer bereits gesetzt ist" - Danke! Ich habe dieses Ding sehr vermisst!
Ivan