Skip to content

Instantly share code, notes, and snippets.

@hexode
Forked from wernight/inotifyexec.py
Created April 29, 2014 15:24
Show Gist options
  • Select an option

  • Save hexode/11403574 to your computer and use it in GitHub Desktop.

Select an option

Save hexode/11403574 to your computer and use it in GitHub Desktop.
#!/bin/bash -e
#
# Author: Werner Beroux <werner@beroux.com>
# Help?
if [[ $# -eq 0 || $1 == --help || $1 == -h ]]
then
echo "inotifyexec version 1.0"
echo "Requires inotify-tools."
echo ""
echo "Usage: inotifyexec <command> <inotifywait arguments...>"
echo "Example: inotifyexec make -r . -qq -e modify,create,delete --exclude '*.swp'"
echo ""
echo "Once watch established, press Ctrl + C once to shutdown the watch cleanly."
if [[ $# -eq 0 ]]
then
exit 1
else
exit 0
fi
fi
exec_command=$1
shift
inotifyargs=$*
# Listen to a single file changes, should be the temporary file changes.
if [[ "$#" -eq 1 && -e $1 ]]
then
# Ignore errors when executing the command.
set +e
while inotifywait -qq -e attrib $1
do
$exec_command
done
else
tmp_file=$(mktemp)
touch $tmp_file
# Fork a listener on the temporary file.
$0 "$exec_command" $tmp_file &
# Keep listening to the desired directory:
# Each change will touch the temporary file again.
inotifywait --monitor $inotifyargs | while read dir ev file
do
if [[ "$exec_command" == "" ]]
then
echo "dir:$dir ev:$ev file:$file"
else
touch $tmp_file
fi
done
rm -f $tmp_file
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment