|
|
@@ -1,39 +1,43 @@ |
|
|
#!/bin/bash |
|
|
# |
|
|
# Watch current directory (recursively) for file changes, and execute |
|
|
# a command when a file or directory is created, modified or deleted. |
|
|
# Watch current directory (recursively) for file changes, and execute a command |
|
|
# when a file or directory is created, modified or deleted. |
|
|
# |
|
|
# Written by: Senko Rasic <[email protected]> |
|
|
# Modified from the original by: Senko Rasic <[email protected]> |
|
|
# https://gist.github.com/senko/1154509 |
|
|
# |
|
|
# Requires Linux, bash and inotifywait (from inotify-tools package). |
|
|
# Requires: |
|
|
# bash |
|
|
# fswatch (https://github.com/alandipert/fswatch) |
|
|
# |
|
|
# To avoid executing the command multiple times when a sequence of |
|
|
# events happen, the script waits one second after the change - if |
|
|
# more changes happen, the timeout is extended by a second again. |
|
|
# To avoid executing the command multiple times when a sequence of events |
|
|
# happen, the script waits WAIT_TIME seconds after the change - if more changes |
|
|
# happen, the timeout is extended by a second again. |
|
|
# |
|
|
# Installation: |
|
|
# Installation (at your own risk): |
|
|
# chmod a+rx onchange.sh |
|
|
# sudo cp onchange.sh /usr/local/bin |
|
|
# |
|
|
# Example use - rsync local changes to the remote server: |
|
|
# |
|
|
# onchange.sh rsync -avt . host:/remote/dir |
|
|
# |
|
|
# onchange.sh rsync -avt . host:/remote/dir |
|
|
# |
|
|
# Released to Public Domain. Use it as you like. |
|
|
# |
|
|
|
|
|
EVENTS="CREATE,CLOSE_WRITE,DELETE,MODIFY,MOVED_FROM,MOVED_TO" |
|
|
EXCLUDE="/\.git/" |
|
|
WAIT_TIME=1 |
|
|
|
|
|
if [ -z "$1" ]; then |
|
|
echo "Usage: $0 cmd ..." |
|
|
exit -1; |
|
|
fi |
|
|
|
|
|
inotifywait -e "$EVENTS" -m -r --format '%:e %f' . | ( |
|
|
fswatch -e $EXCLUDE -r . | ( |
|
|
WAITING=""; |
|
|
while true; do |
|
|
LINE=""; |
|
|
read -t 1 LINE; |
|
|
read -t $WAIT_TIME LINE; |
|
|
if test -z "$LINE"; then |
|
|
if test ! -z "$WAITING"; then |
|
|
echo "CHANGE"; |
|
|
@@ -45,7 +49,7 @@ inotifywait -e "$EVENTS" -m -r --format '%:e %f' . | ( |
|
|
done) | ( |
|
|
while true; do |
|
|
read TMP; |
|
|
echo $@ |
|
|
$@ |
|
|
echo \[`date`\] $@ |
|
|
"$@" |
|
|
done |
|
|
) |