chmod todos os arquivos (incluindo arquivos ocultos) em um diretório no Linux (não recursivamente)

6

Ontem fiz algo estúpido que hoje percebi. Eu corri:

/root# chmod o-rwx * .*

Isso supostamente remove as permissões de leitura, gravação e execução do mundo em todos os arquivos no diretório atual ( /root ). Assim que fiz isso, screen se comportou de maneira estranha, não consegui executar comandos como um usuário não-root e o ssh se recusou a funcionar a menos que eu fiz login com o root.

Isso foi causado pelo fato de que bash expandiu .* para .. também! Agora, como eu chmod todos os arquivos em um diretório com chmod , sem usar find , um loop ou outra linguagem como perl?

    
por Lekensteyn 12.12.2010 / 09:57

3 respostas

10

Se você estiver usando o bash, a configuração de dotglob fará com que * também corresponda aos arquivos que começam com . .

shopt -s dotglob
echo *
    
por 12.12.2010 / 10:09
3

Você diz "sem usar a localização", mas a ferramenta certa é a correta para esse trabalho, pois fornece um alto nível de controle. Você pode dizer para recurse ou não, alterar diretórios ou não, etc ... Por exemplo:

  • Todos os arquivos no diretório atual: find . -maxdepth 1 -type f
  • Todas as entradas (arquivos + diretórios + outros): find . -maxdepth 1

O Find normalmente não distingue entre arquivos regulares e arquivos "ocultos", mas não inclui .. . Se você quer que ele os ignore, você pode adicionar '!' -name '.*' , se você quer que ele opere somente em arquivos de ponto, você pode adicionar -name '.*' .

Outra coisa interessante é que você pode fazer o que foi dito acima e imprimir as entradas nas quais ele irá operar. Então, adicione "| less" ao final e você poderá ver o que vai operar antes de realmente fazer as alterações. Esta etapa de revisão pode ter evitado o problema que você viu.

Uma vez que você tenha um comando de busca que você goste, você pode fazê-lo rodar o comando chmod adicionando -exec chmod o-rwx '{}' ';' ao final. Altere ';' para + se a sua versão find for compatível.

Realmente, encontrar é uma ferramenta que você não deveria ter medo de usar neste tipo de situação, é realmente a ferramenta certa para o trabalho.

    
por 12.12.2010 / 22:09
2

É curto e alegre, e não totalmente confiável no sentido de que ele perde dotfiles com nomes estranhos (por exemplo, .+baz ), mas como há muito poucos desses, eu aprendi a fazer

chmod -R foo:bar * .[0-z]*
    
por 12.12.2010 / 12:29