entr gördüğüm en basit ve en birleştirilebilir dosya bildirim aracıdır. Kullanımı dizinlerden ziyade dosyaları izlemek için optimize edilmiştir, ancak vakanızı da çözebilir.
Eklenen dosyayı algılamak ve üzerinde işlem yapmak için, örneğin, örneğin make
. entr
adı veya bunun gibi bir şey göndermez, sadece çalıştırmasını söylediğiniz şeyi çalıştırır.
Bir dizine eklenen dosyaları kontrol etmek için:
## entr exits with rc=0 when terminated
## rc=1 when watched files go away or don't exist to begin with
## rc=2 when new files arrive in watched directories
until echo /path/to/directory_to_watch | entr -d do_stuff
do sleep 1; done
Varolan bir dosya değiştiğinde de işlem yapmak istiyorsanız:
## Here's why it comes in handy that entr exits when new files are added --
## find gets re-run.
until find /path/to/directory_to_watch/ -path /path/to/directory_to_watch/* |
entr -d do_stuff
do sleep 1; done
... ve find
bir dosya eklendiğinde ifade tekrar çalışacağı için döngü mekanizması bu noktada işe yarar.
Daha iyi hata işleme istiyorsanız ve eklenen / kaldırılan dosya başına yalnızca bir kez çalıştığından emin olmak istiyorsanız, işler biraz tuhaflaşır, ancak bu basit durumlar için mükemmeldir.
DÜZENLEME: Bir sistem düzeyinde bunu yapmak istiyorsanız, böyle bir şey incron , tıpkı (favori süreç yöneticisi komut dosyası eklemek S6 , runit , systemd veya sysvinit ve döngü atlamak:
#!/bin/bash
exec entr -d do_stuff < <(find /path/to/directory_to_watch/ -path /path/to/directory_to_watch/*)
Ve exec
ve işlem ikamesi ( <(...)
), bir işlem yöneticisinden çalıştırılırken, sinyalin düzgün şekilde işlenmesi (yani kabuğun yoldan çekilmesi) için önemlidir.