Skip to content

Instantly share code, notes, and snippets.

@danielepiccone
Forked from senko/onchange.sh
Last active December 26, 2015 16:29
Show Gist options
  • Save danielepiccone/7180106 to your computer and use it in GitHub Desktop.
Save danielepiccone/7180106 to your computer and use it in GitHub Desktop.
#!/bin/bash
#
# 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 <senko.rasic@dobarkod.hr>
#
# Requires Linux, bash and inotifywait (from inotify-tools package).
#
# 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.
#
# Installation:
# 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
#
# Released to Public Domain. Use it as you like.
#
EVENTS="CREATE,CLOSE_WRITE,DELETE,MODIFY,MOVED_FROM,MOVED_TO"
if [ -z "$1" ]; then
echo "Usage: $0 cmd ..."
exit -1;
fi
inotifywait -e "$EVENTS" -m -r --format '%:e %w%f' . |
(while read LINE; do
if [[ $LINE =~ \.swp ]]; then
continue;
fi
if [[ $LINE =~ CLOSE_WRITE ]]; then
FILENAME=${LINE#CLOSE_WRITE:CLOSE};
if [ -f $FILENAME ]; then
$@ $FILENAME;
fi
fi;
done)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment