fswatch is a developer tool that triggers commands in response to filesystem changes. Works well on Mac, Linux, and should also works on Windows(not well tested).
Install
go install github.com/codeskyblue/fswatch@latest
Simple way to use fswatch
Usage example
$ fswatch -v
3.0
$ fswtach --help
show help message ...
Watch file change event and trigger command
TODO: now only watch *.go, *.c, *.py files, watch depth = 0 (current directory)
$ fswatch sh -c "ls -l | wc -l" fswatch >>> [] exec start: sh -c 'ls -l | wc -l' 8 fswatch >>> [] finish in 11.822873ms fswatch >>> changed: fswatch.go fswatch >>> delay: 100ms fswatch >>> [] exec start: [sh -c ls -l | wc -l] 8 fswatch >>> [] finish in 13.606428ms ^Cfswatch >>> Catch signal interrupt! fswatch >>> Kill all running ... Done
Hard way to use fswatch (not recommend)
Step 1
Create a config file fsw.yml
config file example though command fswatch with no arguments
desc: Auto generated by fswatch [fswatch] triggers: - pattens: - '**/*.go' - '**/*.c' # also support '!**/test_*.go' env: DEBUG: "1" # if shell is true, $cmd will be wrapped with `bash -c` shell: true cmd: go test -v delay: 100ms stop_timeout: 1s signal: "KILL" kill_signal: "SIGTERM" watch_paths: - . watch_depth: 5
Step 2
Run fswatch directly.
Every time you edit a file. Command go test -v will be called.
$ fswatch
fswatch >>> exec start: go test -v
# github.com/codeskyblue/fswatch
./fswatch.go:281: main redeclared in this block
previous declaration at ./config.go:354
fswatch >>> program exited: exit status 2
fswatch >>> finish in 145.499911ms
support specify config file through
fswatch --config myfsw.yml
You should know
How fswatch kill process
fswatch send signal to all process when restart. (mac and linux killed by pgid, windows by taskkill)
Ctrl+C will trigger fswatch quit and kill all process it started.
Pattens
More about the pattens. The patten has the same rule like .gitignore.
So you can write like this.
- pattens:
- '*.go'
- '!*_test.go'
- '!**/bindata.go'
main.go changed will trigger command, but a_test.go and libs/bindata.go will be ignored.
FAQs
too many open files
For mac, run the following command
sysctl -w kern.maxfiles=20480
sysctl -w kern.maxfilesperproc=18000
ulimit -S -n 2048
Other
Chinese Blog: http://my.oschina.net/goskyblue/blog/194240
Friendly link:
Code History
I reviewed the first version of fswatch(which was taged 0.1). The code I look now is shit. So I deleted almost 80% code, And left some very useful functions.
Alternative
- https://github.com/cortesi/modd
- https://github.com/emcrisostomo/fswatch write with cpp
- https://github.com/Unknwon/bra Funny name.
LICENSE
Under MIT