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 *
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?
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:
find . -maxdepth 1 -type f
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.
É 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]*