Conceda permissões de usuário aos arquivos

Conceda permissões de usuário aos arquivos

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 atual

  • Em 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 findcomando 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 sudocomando:

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 *[..]

informação relacionada