Bash path glob combinando dotfiles e parent em pwd

1

O comando

$ chmod -R 700 ./.*

procura e tenta chmod arquivos e diretórios acima de pwd . Por quê?

Resultados esperados: considere pwd é /home/user , esperaria que o primeiro . em ./.* fosse substituído por /home/user . Então eu esperaria que o chmod se aplicasse recursivamente ( -R ) a todos os arquivos iniciados por um ponto ( .* ) em /home/user , então: $ chmod -R 700 /home/user/.* todos juntos.

Eu recebo um monte de erros como:

chmod: cannot access './../otheruser/file': Permission denied

Isso está acontecendo porque .. corresponde a .* ?

    
por Dmitry Minkovsky 28.11.2012 / 18:33

1 resposta

6

./.* também corresponde a ./.. , fazendo com que chmod -R tente repetir tudo em .. .

Adicionado:

Se você quiser apenas os arquivos de ponto e diretórios no diretório atual, tente .[!.]* , que corresponde a tudo que começa com . e tem pelo menos um caractere não ponto seguinte.

Se você quiser todos os arquivos de ponto em qualquer árvore de diretórios atual, use find como mostrado aqui usando a substituição de comando $(...) para colar a saída de find de volta na linha de comando como argumentos para chmod .

chmod 700 $(find -name ".[!.]*")
    
por 28.11.2012 / 18:39

Tags