GNU/Linux >> Tutoriels Linux >  >> Linux

Comment exécuter automatiquement un script lorsque le contenu d'un répertoire change sous Linux ?

Solution 1 :

Si vous avez la chance d'être sur une distribution basée sur Debian, apt-get install dnotify . D'autres distributions ont probablement quelque chose de similaire - recherchez le dnotify nom.

dnotify est un programme simple basé sur l'API dnotify du noyau Linux 2.4.19+. dnotify peut exécuter une commande spécifiée chaque fois que le contenu d'un répertoire spécifique change. Il est exécuté à partir de la ligne de commande et prend deux arguments :un ou plusieurs répertoires à surveiller et une commande à exécuter chaque fois qu'un répertoire a changé. Les options contrôlent les événements à déclencher :lorsqu'un fichier a été lu dans le répertoire, lorsqu'il a été créé, supprimé, etc.

Si vous souhaitez gérer cela dans votre propre programme, dnotify est également l'API que vous souhaitez utiliser.

Solution 2 :

Vous pouvez exécuter un script avec les outils inotify, quelque chose comme ça. Il surveillera le répertoire pour les changements dans les fichiers modifiés, les nouveaux fichiers et les fichiers supprimés, puis il exécutera le script.

#!/bin/sh
while inotifywait -e modify -e create -e delete /home/me/code; do
    rsync [options] /home/me/code/ /media/nfs/code/ 
done

Solution 3 :

incron est essentiellement ce que vous voulez, je pense. Il utilise inotify comme mécanisme de notification (qui, comme d'autres l'ont souligné, remplace dnotify), mais ne nécessite pas de script qui s'exécute en continu, en utilisant inotifywait ou similaire (bien que, évidemment, le démon incron tourne tout le temps). Les « crontabs » à l'échelle du système et les « crontabs » utilisateur sont pris en charge de la même manière que le cron standard, mais plutôt que de spécifier des heures comme déclencheurs, des événements inotify et des noms de fichiers/répertoires sont utilisés.

incron est empaqueté pour de nombreuses distributions, y compris Ubuntu et Debian, je crois.


Linux
  1. Comment trouver le fichier le plus ancien dans une arborescence de répertoires sous Linux

  2. Comment exécuter une commande Linux bash dans un script PERL ?

  3. Comment exécuter un script shell lorsqu'un fichier ou un répertoire change ?

  4. Comment exécuter un script en arrière-plan (linux openwrt) ?

  5. linux :comment exécuter une commande dans un répertoire donné

Comment basculer automatiquement vers un répertoire sans utiliser la commande cd sous Linux

Comment exécuter tous les scripts dans un répertoire sous Linux

Comment afficher le contenu d'une archive ou d'un fichier compressé sous Linux

Comment trouver la taille totale d'un répertoire sous Linux

Comment exécuter un script Shell en tant que service SystemD sous Linux

Comment migrer le répertoire HOME sous Linux