Khi tôi cần phát hiện các thay đổi của tệp và thực hiện một số thứ khác ngoài những gì tail -f filename
chúng tôi đã sử dụng inotifywait
trong một tập lệnh để phát hiện thay đổi và hành động theo nó. Một ví dụ về việc sử dụng được hiển thị dưới đây. Xem man inotifywait
tên sự kiện và chuyển đổi khác. Bạn có thể cần phải cài đặt inotify-tools
gói, ví dụ thông qua sudo apt-get install inotify-tools
.
Đây là kịch bản ví dụ, được gọi là 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
Trong hai bảng điều khiển, tôi đã nhập các lệnh như sau (trong đó A> có nghĩa là mục nhập trong bảng điều khiển A và B> có nghĩa là mục nhập trong bảng điều khiển 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
Đầu ra sau cat t
xuất hiện trong giao diện điều khiển 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
Đầu ra sau exec-on-change
xuất hiện trong giao diện điều khiển 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
Các exec-on-change
kịch bản chấm dứt khi tôi rm
'd t
.