Puoi usare chmod con X
mode (la X maiuscola) per impostare il flag eseguibile solo per le directory.
Nell'esempio seguente il flag eseguibile viene cancellato e quindi impostato per tutte le directory in modo ricorsivo:
~$ 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
Un po' di spiegazione:
chmod -x foo
- cancella eXecutable flag perfoo
chmod +x foo
- impostare l'eXecutable flag perfoo
chmod go+x foo
- come sopra, ma imposta il flag solo per Gruppo e Altro utenti, non toccare Utente (proprietario) autorizzazionechmod go+X foo
- come sopra, ma si applica solo alle directory, non toccare i filechmod -R go+X foo
- come sopra, ma fallo ricorsivamente per tutte le sottodirectory difoo
È necessario l'accesso in lettura, oltre all'accesso in esecuzione, per elencare una directory. Se hai solo accesso in esecuzione, puoi trovare i nomi delle voci nella directory, ma nessun'altra informazione (nemmeno i tipi, quindi non sai quali delle voci sono sottodirectory). Questo funziona per me:
find . -type d -exec chmod +rx {} \;