]> gitweb.fluxo.info Git - scripts.git/commitdiff
Feat: adds inotifier script
authorSilvio Rhatto <rhatto@riseup.net>
Sat, 3 Aug 2024 02:27:36 +0000 (23:27 -0300)
committerSilvio Rhatto <rhatto@riseup.net>
Sat, 3 Aug 2024 02:27:36 +0000 (23:27 -0300)
inotifier [new file with mode: 0755]

diff --git a/inotifier b/inotifier
new file mode 100755 (executable)
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