Конечно, решения из сети - это что-то. Скрипты в bash, которые делают ls директории, затем diff - и если различается, то - запускаем команду. Это круто. Постепенно находим очевидную вещь - сообщить нам об изменении директории должна ОС. Есть и механизм - dnotify. Ищем дальше, находим пример в 10 строк, как это пишется на C. Ну а чем мы хуже, добавим только чуть-чуть логики, чтобы польза была от утилитки.
Самая прелесть в этом, что компилируется все в одну команду:
gcc dnotify.c -o dnotify
Используется следующим образом: первый аргумент - это команда для выполнения, остальные - директории, при изменении который будет позвана команда. Например:
./dnotify "echo hello" .
запускает слушание текущей директории и при изменении в ней скажет нам "hello".
kilork@pantogan:~/projects/dnotify$ ./dnotify "echo hello" . setting handlers: . done. monitoring started...... в другом терминале ...
kilork@pantogan:~/projects/dnotify$ touch dnotify.c... возвращаемся в первый терминал ...
3 hello
Больше всего времени я потратил на то, чтобы заставить утилитку игнорировать события, пока работает дочерний процесс (в процессе компиляции в директории может много чего поменяться, поэтому изменения в процессе компиляции мы игнорируем, хоть это и не совсем корректно, но для нашей утилиты в 5 строчек - пойдет). Для этого пришлось делать fork, и ловить SIGCHLD. Вроде работает, немного фана получено - и снова за javascript...
Исходные коды доступны в hg-репозитории по адресу http://kilork.org/public/notify/.
З.Ы. Добавил статью по inotify - http://kilork.blogspot.com/2011/02/linux-inotify.html.



