Permissão de execução para todos os arquivos criados sob um diretório específico por padrão [duplicado]

3

Gostaria que você soubesse se há algum método para fornecer permissão de execução para todos os arquivos criados em um diretório específico por padrão.

ou seja,

Se eu criar um arquivo, digamos foo.sh em um diretório fooscripts , ele deverá ter permissão de execução por padrão. Mas se eu criar o mesmo arquivo fora de fooscripts , deve ser como sempre.

    
por Severus Tux 04.06.2016 / 15:40

2 respostas

3

Usando o inotifywait

Como mencionado, você pode usar inotify-tools ( inotifywait ) para assistir a um diretório específico para mudanças, por exemplo, pelo script abaixo, e subsequentemente definir novos arquivos executáveis recursivamente.

O script usa o inotifywait -command, que é acionado por eventos específicos, definidos pela -e -option. Felizmente, o comando pode ser usado em combinação com vários tipos de eventos.
Como você deseja que os arquivos dentro do diretório sejam executáveis, no script, dois eventos são definidos:

-e move

que notará arquivos movidos para o diretório, e

-e create

que notará novos arquivos criados dentro do diretório.

Além disso, as opções:

-m -r 

são para fazer o comando rodar indefinidamente ("monitor") e recursivamente no diretório, enquanto:

--format '%w%f'

exibe o diretório (caminho para o arquivo, %w ) mais o nome do arquivo ( %f ) que causou o evento.


Mais sobre opções de inotifywait podem ser encontradas aqui ou, como sempre, em man inotifywait

O script

#!/bin/sh
# you might want to change the directory below into the targeted directory
DIR="/home/jacob/Bureaublad/test123"
inotifywait -m -r -e move -e create --format '%w%f' "$DIR" | while read f

do
  chmod +x "$f"
done

Como usar

  1. Você provavelmente terá que instalar inotify-tools primeiro:

    sudo apt-get install inotify-tools
    
  2. Copie o script em um arquivo vazio, salve-o como set_executable.sh

  3. Na cabeça do script, defina o caminho para a pasta de destino:

    # change the directory below into the targeted directory
    DIR="/home/jacob/Bureaublad/test123"
    

    ... e teste-execute o script a partir de um terminal.

  4. Se tudo funcionar bem, adicione o script a Startup Applications: Dash > Aplicativos de inicialização > Adicionar.

Nota

Observe que notifywait age em alterações (eventos). Isso implica que os arquivos que foram adicionados ou criados antes do script executado não serão afetados. Também não irá reescrever os arquivos executáveis se você os definir de forma manual e deliberada, não , para serem executáveis, enquanto estiverem dentro do diretório de destino.

    
por Jacob Vlijm 04.06.2016 / 21:42
1

Não. Você pode usar inotify para assistir ao diretório e chmod novos arquivos.

Veja como descobrir sobre inotify :

man -k inotify
for i in $( man -k inotify | awk '{ print $1 }' ) ; do 
    man $i 
    read -p "Print?: " ans 
    if [[ "x$ans" = "xy" ]] ; then 
        man -t $i | lpr -J $i 
    fi 
done
# sr is from surfraw, Shell Users Revoultionary Front Rage Against the Web
sr google inotify
    
por waltinator 04.06.2016 / 15:44