diff options
author | Silvio Rhatto <rhatto@riseup.net> | 2024-08-02 23:27:36 -0300 |
---|---|---|
committer | Silvio Rhatto <rhatto@riseup.net> | 2024-08-02 23:27:36 -0300 |
commit | 5a97d8d46621fbb51c25a087eae55af33cbf8aa8 (patch) | |
tree | 75821c4ea68b50f9dc0303aeb15497d1e1431dcb | |
parent | 41dff3b7ab2deb5d2ab781640261a5fdbee6953d (diff) | |
download | scripts-5a97d8d46621fbb51c25a087eae55af33cbf8aa8.tar.gz scripts-5a97d8d46621fbb51c25a087eae55af33cbf8aa8.tar.bz2 |
Feat: adds inotifier script
-rwxr-xr-x | inotifier | 43 |
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 |