Estou tendo dificuldade em resolver esse problema.
escreva um script de shell para verificar os direitos executáveis de todos os arquivos no diretório atual. se o arquivo não tiver o executável do usuário correto, torne-o executável do usuário.
Eu estava pensando em fazer um loop em todos os arquivos no diretório atual e gravar a saída em um arquivo de texto. em seguida, leia o quarto caractere de cada linha e verifique se é 'x' ou '-'
Responder1
A ideia que você tem parece legítima, mas desnecessariamente grande e complexa; em vez disso, você pode usar isto:
#!/bin/bash
for file in *; do
[[ -x $file ]] || chmod u+x "$file"
done
Isto irá ler todos os arquivos (
*
) no diretório atualEm seguida irá verificar se o arquivo é executável pelo usuário que executa o script (
[[ -x $file ]]
)Caso contrário (
||
), tornará o arquivo executável para o usuário (chmod u+x "$file"
).
Por padrão, *
não corresponderá aos arquivos ocultos; para corresponder aos arquivos ocultos, adicione também a linha
shopt -s dotglob
depois da linha shebang.
Se você deseja pesquisar e operar apenas em arquivos normais:
#!/bin/bash
for file in *; do
if [[ -f $file ]]; then
[[ -x $file ]] || chmod u+x "$file"
fi
done
Responder2
É um find
comando simples com chmod
:
find . -type f ! -perm -u+x -exec chmod u+x {} \;
ou apenas para a pasta atual:
find . -maxdepth 1 -type f ! -perm -u+x -exec chmod u+x {} \;
Explicação
.
Inicie a pesquisa na pasta atual
-maxdepth
Não recursivo
-type f
Apenas arquivos, sem pastas
! -perm -u+x
Somente arquivos sem o sinalizador executável do proprietário do arquivo
-exec chmod u+x {}
Defina o sinalizador executável para o proprietário do arquivo
Responder3
Gostaria que você tivesse mencionado se isso faz parte de um projeto maior de automação ou simplesmente algo que você deseja fazer.
Você pode simplesmente fazer o seguinte em um diretório:
chmod u+x *
Isso adiciona status executável a todos os arquivos dentro de uma pasta para "seu usuário". Você pode tentar adicioná-lo para "todos" por
chmod a+x *
Observe que seu usuário deve ter permissão para alterar arquivos dentro dessa pasta específica. Isso significa que você deveria ter 'escrever'permissão. Caso contrário, você não poderá mudar nada. Se o seu usuário for administrador, você pode invocá-lo com o sudo
comando:
sudo chmod a+x *
Se um arquivo já tiver status executável, não há mal nenhum em atribuir-lhe o status novamente. Claro, como eu disse, a menos que você queira usar o nome de todos os arquivos cujo status foi alterado para outra finalidade, por exemplo, relatórios. o script de heemayl é uma coisa legal para tais propósitos.
Adicionado a partir dos comentários de Mostafa Najafiyazdi
[..] se ele não quiser mexer na permissão de pastas que não possuem permissão executável, ele não deve usar chmod u+x *
[..]