o que é curinga para selecionar todos os diretórios em um diretório

13

Eu quero definir bit pegajoso para todos os diretórios em um diretório excluindo arquivos. existe algum curinga para fazer isso?

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

Respostas:

24

Use */para corresponder apenas aos diretórios.

chmod g+s /var/www/*/

Para corresponder a todos os diretórios e subdiretórios, use **/*/(desde que você tenha globstarativado no bash):

shopt -s globstar
chmod g+s /var/www/**/*/
dogbane
fonte
2
Funciona bem, mas será interrompido assim que o comprimento da linha de comando expandida exceder o limite de comprimento da linha de comando. -> cyberciti.biz/faq/argument-list-too-long-error-solution
Scott
1
sim, eu estou bem ciente disso. No entanto, o OP solicitou um "curinga".
dogbane
sim! eu pedi curinga, thanq.
Necktwi
Eu sei que ele pediu uma solução curinga. Eu apenas apontei que isso falharia sob alguma circunstância. Outras que, não critc para ver aqui (I # ve comentou ainda upvoted, porque é uma solução de trabalho para a maioria dos casos) ^^
Bonsi Scott
13

você pode usar find, veja o exemplo abaixo

find /var/www/ -type d -exec chmod g+s {} \;
Rahul Patil
fonte
3
Isso é bom, mas ainda assim não é um curinga - mas tem a vantagem de não falhar devido a muitos diretórios
Bonsi Scott
Observe que isso é recursivo por padrão. Se você deseja que seu comando seja aplicado apenas no nível superior, use o -maxdepth findargumento
Kris Harper #
0

Este NÃO é um curinga, por isso peço desculpas por não responder, no entanto ...
ls -al |grep ^d | awk '{print$NF}'listarei todos os diretórios no diretório atual, cabe a você decidir se deseja processar .e.. ou tira-los.

echo $(ls -al |grep ^d | awk '{print$NF}') faz com que se comporte como um curinga

bsd
fonte
Isso será interrompido se os arquivos tiverem espaços em branco à esquerda ou à direita ou novas linhas.
Chris Down