Se estiver usando Linux , você deve tentar o comando inotifywait , ele foi projetado para ouvir eventos em arquivos ou diretórios.
inotifywait -m -r /dir
Você pode usar um loop while para filtrar a saída.
Além disso, é muito leve: não é necessário poll() a cada N segundos, é tudo mágica.
Veja o link