Inotifywait sous Linux permet-il la collecte d’événements sur une période de temporisation?

cf. FSEvents sur OSX, qui par défaut collecte les événements FS sur 1 seconde (timeout configurable) avant de déclencher l’événement.

Cela présente l’avantage de collecter une série de modifications du système de fichiers dans un seul événement (le script ne s’exécutera donc pas plus que nécessaire), au prix d’une latence.

Par exemple, l’enregistrement d’un fichier dans Vim modifie de nombreux fichiers temporaires (il supprime généralement un fichier tampon, met à jour un fichier d’annulation et crée puis efface un fichier de test appelé 4193 ) en plus du fichier lui-même. Sur OSX avec un petit outil qui utilise cette API telle que fork de fswatch , tous ces éléments peuvent être regroupés dans un “événement par lots”, tandis qu’avec inotifywait -m tous les événements que je spécifie apparaissent sur le stream dans des lignes distinctes. pas simple à regrouper sans traitement externe.

Je suis presque sûr que la solution consiste simplement à envelopper et à effectuer ce traitement, mais j’espérais qu’il y avait une fonctionnalité cachée pour spécifier un délai d’expiration comme le permet FSEvents.

En fait, je commence à croire que ce genre de chose ne devrait pas entrer dans le cadre des fonctionnalités d’ inotify .

Je n’ai pas vraiment trouvé la solution appropriée, mais il me semble qu’il existe une manière élégante de le faire. Voici mon sharepoint départ (qui s’arrête si rien n’est vu dans une seconde, je veux que quelque chose s’accumule en une seconde)

Effectue actuellement des tests avec cela. Voici quelques scripts de test que je travaille assez bien.

 group=0 ( for val in {1..10}; do echo "$RANDOM/10000" | bc | xargs sleep; echo $val; done ) | while true; do while read -t 1 line; do echo "read $group $line"; done; ((group++)); done