web-dev-qa-db-fra.com

Autorisation d'exécution pour tous les fichiers créés dans un répertoire spécifique par défaut

J'aimerais que vous sachiez s'il existe une méthode permettant de fournir une autorisation d'exécution à tous les fichiers créés dans un répertoire spécifique par défaut.

c'est à dire,

Si je crée un fichier avec foo.sh sous un répertoire fooscripts, il devrait disposer d'une autorisation d'exécution par défaut. Mais si je crée le même fichier en dehors de fooscripts, il devrait être comme d'habitude.

3
Severus Tux

Utiliser inotifywait

Comme indiqué, vous pouvez utiliser inotify-tools (inotifywait) pour surveiller les modifications apportées à un répertoire spécifique, par exemple, à l'aide du script ci-dessous, puis définir les nouveaux fichiers exécutables de manière récursive.

Le script utilise la commande inotifywait, déclenchée par des événements spécifiques , définis par l'option -e. Heureusement, la commande peut être utilisée en combinaison avec plusieurs types d'événements.
Puisque vous voulez que les fichiers du répertoire soient exécutables, deux événements sont définis dans le script:

-e move

qui remarquera les fichiers déplacés dans le répertoire, et

-e create

qui remarquera les nouveaux fichiers créés dans le répertoire.

En outre, les options:

-m -r 

doivent exécuter la commande indéfiniment ("monitor") et de manière récursive dans le répertoire, tandis que:

--format '%w%f'

renvoie le répertoire (chemin d'accès au fichier, %w) ainsi que le nom du fichier (%f) qui a provoqué l'événement.


Plus d’informations sur les options de inotifywait peuvent être trouvées ici , ou, comme toujours, dans man inotifywait

Le scénario

#!/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

Comment utiliser

  1. Vous devrez probablement installer inotify-tools en premier:

    Sudo apt-get install inotify-tools
    
  2. Copiez le script dans un fichier vide, enregistrez-le sous le nom set_executable.sh

  3. Dans l'en-tête du script, définissez le chemin d'accès au dossier cible:

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

    ... et testez le script depuis un terminal.

  4. Si tout fonctionne correctement, ajoutez le script dans Applications de démarrage: Tableau de bord> Applications de démarrage> Ajouter.

Remarque

Notez que notifywait agit sur change (événements). Cela implique que les fichiers ajoutés ou créés avant le script exécuté ne seront pas affectés. De même, les fichiers exécutables ne seront pas réinitialisés si vous les définissez manuellement et délibérément et non , alors qu'ils se trouvent dans le répertoire ciblé.

3
Jacob Vlijm

Non. Vous pouvez utiliser inotify pour regarder le répertoire et chmod nouveaux fichiers.

Voici comment trouver 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
1
waltinator