Sie können chmod mit dem X
verwenden Modusbuchstabe (das große X), um das Ausführbarkeits-Flag nur für Verzeichnisse zu setzen.
Im Beispiel unten wird das Ausführbar-Flag gelöscht und dann rekursiv für alle Verzeichnisse gesetzt:
~$ mkdir foo
~$ mkdir foo/bar
~$ mkdir foo/baz
~$ touch foo/x
~$ touch foo/y
~$ chmod -R go-X foo
~$ ls -l foo
total 8
drwxrw-r-- 2 wq wq 4096 Nov 14 15:31 bar
drwxrw-r-- 2 wq wq 4096 Nov 14 15:31 baz
-rw-rw-r-- 1 wq wq 0 Nov 14 15:31 x
-rw-rw-r-- 1 wq wq 0 Nov 14 15:31 y
~$ chmod -R go+X foo
~$ ls -l foo
total 8
drwxrwxr-x 2 wq wq 4096 Nov 14 15:31 bar
drwxrwxr-x 2 wq wq 4096 Nov 14 15:31 baz
-rw-rw-r-- 1 wq wq 0 Nov 14 15:31 x
-rw-rw-r-- 1 wq wq 0 Nov 14 15:31 y
Eine kleine Erklärung:
chmod -x foo
- Löschen Sie die ausführbare Datei Flag fürfoo
chmod +x foo
- Legen Sie die ausführbare Datei fest Flag fürfoo
chmod go+x foo
- wie oben, aber das Flag nur für Gruppe setzen und Andere Benutzer, berühren Sie nicht den Benutzer (Eigentümer-)Erlaubnischmod go+X foo
- wie oben, aber gelten nur für Verzeichnisse, Dateien nicht anfassenchmod -R go+X foo
- wie oben, aber rekursiv für alle Unterverzeichnisse vonfoo
Sie benötigen zusätzlich zum Ausführungszugriff Lesezugriff, um ein Verzeichnis aufzulisten. Wenn Sie nur Ausführungszugriff haben, können Sie die Namen von Einträgen im Verzeichnis herausfinden, aber keine anderen Informationen (nicht einmal Typen, sodass Sie nicht wissen, welche der Einträge Unterverzeichnisse sind). Das funktioniert bei mir:
find . -type d -exec chmod +rx {} \;