¿Qué es comodín para seleccionar todos los directorios en un directorio?

13

Quiero establecer un bit fijo para todos los directorios en un directorio excepto los archivos. ¿Hay algún comodín para hacer esto?

#sudo chmod g+s /var/www/<WILD_CARD_FOR_ALL_DIRECTORIES>
Necktwi
fuente

Respuestas:

24

Use */para hacer coincidir solo directorios.

chmod g+s /var/www/*/

Para hacer coincidir todos los directorios y subdirectorios, use **/*/(siempre que haya globstarhabilitado en bash):

shopt -s globstar
chmod g+s /var/www/**/*/
dogbane
fuente
2
Funciona bien, pero se romperá tan pronto como la longitud de la línea de comando expandida exceda el límite de longitud de la línea de comando. -> cyberciti.biz/faq/argument-list-too-long-error-solution
Bonsi Scott
1
Sí, soy muy consciente de eso. Sin embargo, el OP solicitó un "comodín".
dogbane
¡Si! pedí comodín, gracias.
Necktwi
Sé que pidió una solución comodín. Solo he señalado que fallaría bajo alguna circunstancia. Aparte de eso, no hay críticas para ver aquí (ya he comentado aún votado, porque es una solución de trabajo para la mayoría de los casos) ^^
Bonsi Scott
13

puedes usar find, ver el ejemplo a continuación

find /var/www/ -type d -exec chmod g+s {} \;
Rahul Patil
fuente
3
Esto es bueno, aunque no es un comodín, pero tiene la ventaja de no fallar debido a muchos directorios
Bonsi Scott
Tenga en cuenta que esto es recursivo por defecto. Si solo desea que su comando se aplique al nivel superior, puede usar el -maxdepth findargumento.
Kris Harper
0

Esto no es un comodín, por lo que me disculpo por un no-respuesta, sin embargo ...
ls -al |grep ^d | awk '{print$NF}', aparecerá una lista de todos los directorios en el directorio actual, le toca a usted decidir si desea procesar .y ..o despojarlos.

echo $(ls -al |grep ^d | awk '{print$NF}') hace que se comporte como un comodín

bsd
fuente
Esto se romperá si sus archivos tienen espacios en blanco iniciales o finales, o nuevas líneas.
Chris Down