Ketika saya perlu mendeteksi perubahan file dan melakukan sesuatu selain yang tail -f filename
dilakukan, saya telah menggunakan inotifywait
skrip untuk mendeteksi perubahan dan menindaklanjutinya. Contoh penggunaan ditunjukkan di bawah ini. Lihat man inotifywait
nama dan sakelar acara lainnya. Anda mungkin perlu menginstal inotify-tools
paket, misalnya melalui sudo apt-get install inotify-tools
.
Berikut contoh skrip yang disebut exec-on-change
:
#!/bin/sh
# Detect when file named by param $1 changes.
# When it changes, do command specified by other params.
F=$1
shift
P="$*"
# Result of inotifywait is put in S so it doesn't echo
while S=$(inotifywait -eMODIFY $F 2>/dev/null)
do
# Remove printf if timestamps not wanted
printf "At %s: \n" "$(date)"
$P
done
Dalam dua konsol saya memasukkan perintah sebagai berikut (di mana A> berarti entri di konsol A, dan B> berarti entri di konsol B.)
A> rm t; touch t
B> ./exec-on-change t wc t
A> date >>t
A> date -R >>t
A> date -Ru >>t
A> cat t; rm t
Output berikut dari cat t
muncul di konsol A:
Thu Aug 16 11:57:01 MDT 2012
Thu, 16 Aug 2012 11:57:04 -0600
Thu, 16 Aug 2012 17:57:07 +0000
Output berikut dari exec-on-change
muncul di konsol B:
At Thu Aug 16 11:57:01 MDT 2012:
1 6 29 t
At Thu Aug 16 11:57:04 MDT 2012:
2 12 61 t
At Thu Aug 16 11:57:07 MDT 2012:
3 18 93 t
The exec-on-change
Script dihentikan ketika saya rm
'd t
.