fswatch to watch only a certain file extension
You may watch for changes to files of a single extension like this:
fswatch -e ".*" -i ".*/[^.]*\\.xxx$" .
This will exclude all files and then include all paths ending with .xxx
(and also exclude files starting with a dot).
If you want to run a command on the file change, you may add the following:
fswatch -e ".*" -i ".*/[^.]*\\.xxx$" -0 . | xargs -0 -n 1 -I {} echo "File {} changed"
I'm fswatch
author. It may not be very intuitive, but fswatch
includes everything unless an exclusion filter says otherwise. Coming to your problem: you want to include all files with a given extension. Rephrasing in term of exclusion and inclusion filters:
- You want to exclude everything.
- You want to include files with a given extension
ext
.
That is:
To exclude everything you can add an exclusion filter matching any string:
.*
.To include files with a given extension
ext
, you add an inclusion filter matching any path ending with.ext
:\\.ext$
. In this case you need to escape the dot.
to match the literal dot, then the extensionext
and then matching the end of the path with$
.
The final command is:
$ fswatch [options] -e ".*" -i "\\.ext$"
If you want case insensitive filters (e.g. to match eXt
, Ext
, etc.), just add the -I
option.