#!/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 [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