aboutsummaryrefslogtreecommitdiff
path: root/inotifier
diff options
context:
space:
mode:
Diffstat (limited to 'inotifier')
-rwxr-xr-xinotifier43
1 files changed, 43 insertions, 0 deletions
diff --git a/inotifier b/inotifier
new file mode 100755
index 0000000..7c3c3be
--- /dev/null
+++ b/inotifier
@@ -0,0 +1,43 @@
+#!/usr/bin/env bash
+#
+# Run commands when a folder content changes.
+#
+
+# Parameters
+BASENAME="`basename $0`"
+WATCHED="$1"
+COMMAND="$2"
+
+# Listened inotify events
+#
+# See inotifywait(0) for the full list and description of all supported events.
+#
+# By default, exclude "access", "close", "close_write", "close_nowrite", "open"
+# from the list of events
+INOTIFY_EVENTS="-e modify -e attrib -e moved_to -e moved_from -e move -e move_self -e create -e delete -e delete_self -e unmount"
+
+# Check
+if [ -z "$COMMAND" ]; then
+ echo "usage: $BASENAME <folder> <command> [args]"
+ exit 1
+elif [ ! -e "$WATCHED" ]; then
+ echo "error: file or folder not found: $WATCHED"
+ exit 1
+fi
+
+# Shift
+shift 2
+
+# Normalize folder name
+if [ -d "$WATCHED" ]; then
+ WATCHED="`cd $WATCHED &> /dev/null && pwd`"
+fi
+
+# UX
+echo "Watching $WATCHED to exec \"$COMMAND $*\" upon changes..."
+
+# Dispatch
+# Excluding any .git folder from being watched
+while inotifywait $INOTIFY_EVENTS --exclude '.*.git.*' -r $WATCHED; do
+ $COMMAND $*
+done