Comment appeler un script bash automatiquement lorsque le contenu du répertoire est chargé

Mon but est d’exécuter automatiquement un script bash chaque fois qu’un nouveau fichier est ajouté à un répertoire particulier ou à un sous-répertoire de ce répertoire particulier.

Scénario de détail:

Je crée un processus automatisé pour la soumission de fichiers des enseignants aux élèves et vice versa. L’expéditeur va télécharger le fichier et il sera stocké dans le répertoire Uploads du serveur LAMP au format, ex. “name_course-name_filename.pdf”. Je veux une méthode pour que, lorsqu’un fichier est stocké dans le dossier Uploads, un script soit appelé et envoie ce fichier à la liste des destinataires. De la firebase database, je peux trouver la liste des destinataires pour ce cours et cet étudiant.

Mon seul souci est de savoir comment appeler un script automatiquement et le faire fonctionner sur des fichiers individuels chaque fois que le contenu du répertoire change. Cron fera des intervalles mais pas un travail en temps réel.

Linux fournit un bon mécanisme à cet effet appelé inotify . inotify est principalement disponible en tant qu’API C. Mais des utilitaires de shell ont également été développés. Vous devez utiliser inotifywait de inotifytools (nom de pkg dans debian) pour cela. Voici un exemple de base:

 #!/bin/bash directory="/tmp" # or whatever you are interestd in inotifywait -m -e create "$directory" | while read folder eventlist eventfile do echo "the following events happened in folder $folder:" echo "$eventlist $eventfile" done 

Mettre à jour:

Si le problème devient compliqué, par exemple vous devrez surveiller les structures de répertoires dynamics et récursives, vous devriez jeter un oeil à incron. C’est un démon de type cron qui exécute des scripts sur certains événements. Mais les événements sont des événements de système de fichiers plutôt que des événements de timer.

Il existe une autre option pour “inotifywait”:

-d –daemon Identique à –monitor, à l’exception de l’exécution en arrière-plan de la journalisation des événements dans un fichier qui doit être spécifié par –outfile. Implique –syslog.

Pour être complet:

-m –monitor Au lieu de quitter après avoir reçu un seul événement, exécutez indéfiniment. Le comportement par défaut consiste à quitter le premier événement.

Dans le bloc do-do de votre instruction ‘while’, vous pouvez parsingr chaque rapport d’événement pour obtenir des détails intéressants, puis utiliser ‘case-esac’ pour prendre des mesures en fonction de chaque événement qui vous intéresse.

Pour quelque chose sur lequel vous comptez vous fier pour vos opérations, vous pouvez également envisager de remplacer le répertoire $ codé en dur par un fichier de configuration. Un tel fichier peut inclure le chemin d’access et le nom de fichier, les événements intéressants pour ce chemin et ce fichier, et un script à exécuter lorsque ces événements se sont produits. Le script peut prendre la liste des événements comme parameters, puis «case-esac» à nouveau.

Juste un ramblins d’un homme, ~~~ 8d; -Dan