Puedes usar chmod con el X
letra de modo (la X mayúscula) para establecer el indicador ejecutable solo para directorios.
En el siguiente ejemplo, el indicador ejecutable se borra y luego se establece para todos los directorios de forma recursiva:
~$ 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 poco de explicación:
chmod -x foo
- borrar el ejecutable bandera parafoo
chmod +x foo
- configurar el ejecutable bandera parafoo
chmod go+x foo
- igual que arriba, pero establece la bandera solo para Grupo y Otro usuarios, no toques el Usuario (propietario) permisochmod go+X foo
- igual que arriba, pero se aplica solo a directorios, no toque archivoschmod -R go+X foo
- igual que arriba, pero haz esto Recursivamente para todos los subdirectorios defoo
Necesita acceso de lectura, además de acceso de ejecución, para enumerar un directorio. Si solo tiene acceso de ejecución, entonces puede averiguar los nombres de las entradas en el directorio, pero ninguna otra información (ni siquiera los tipos, por lo que no sabe cuáles de las entradas son subdirectorios). Esto funciona para mí:
find . -type d -exec chmod +rx {} \;