-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwatch.sh
executable file
·72 lines (62 loc) · 1.09 KB
/
watch.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/bin/bash
print() {
echo "Need three arguments.
arg1: file or directory
arg2: command
arg3: interval(sec)
example) ./watch.sh './src/*.ts' 'make' 1"
}
if [ $# -ne 3 ];
then
print
exit 1
fi
FILES=($(ls -1 $1))
FILES_HASH=()
BEFORE_FILES_HASH=()
COMMAND=$2
INTERVAL=$3
echo "TARGET FILES:"
for item in ${FILES[@]}; do
echo $item
done
get_hash() {
echo `openssl md5 -r $1 | awk '{print $1}'`
}
init() {
i=0
for item in ${FILES[@]}; do
FILES_HASH[i]=`get_hash $item`
BEFORE_FILES_HASH[i]=${FILES_HASH[i]}
i=$(($i + 1))
done
}
process() {
i=0
is_update=0
for item in ${FILES[@]}; do
BEFORE_FILES_HASH[i]=${FILES_HASH[i]}
FILES_HASH[i]=`get_hash $item`
if [ ${BEFORE_FILES_HASH[i]} != ${FILES_HASH[i]} ];
then
echo "update $item"
is_update=1
fi
i=$(($i + 1))
done
if [ $is_update -eq 0 ]; then
return 0
else
return 1;
fi
}
init
while true;
do
sleep $INTERVAL
process
if [ $? == 1 ];
then
eval $COMMAND
fi
done