Cross platform way to run arbitrary commands when files change.
Download one of the prebuilt binaries from the relases page or install it with cargo:
cargo install --git https://github.com/mauri870/iowatchDownload a prebuilt binary from the releases page or follow the compilation steps.
iowatch commandExample:
touch /tmp/file.txt
iowatch -f /tmp/file.txt -p echo '> file changed!'
# in another terminal...
echo 'that is a new line' >> /tmp/file.txtNote: iowatch has builtin support for .[git]ignore files ;)
For commands that uses builtins, pipes or output redirection that needs to run in a shell, there's a -s flag that uses the default system shell:
find /tmp -type f -name '/tmp/*.txt' | iowatch -s 'echo Hello | rev'It also watch changes recursively if a directory is provided!
echo "dir/to/watch" | iowatch -R echo '!'A real world use case for example is the linting of a project with hot reload:
echo "./src" | iowatch -R yarn run lintOr hot reload of a Go project:
echo $PWD | iowatch -R go run .Or auto compile a Latex project whenever an important file changes:
find . -type f \( -name "*.tex" -o -name "*.bib" -o -name "*.png" \) | iowatch tectonic paper.texcargo build --releaseFor arch linux users:
makepkg -sifWe use bats for testing, you can run them with:
cargo build --release
bats ./testsRUST_LOG=debug iowatch