fswatchで多重にコマンドを実行しないようにする

JavaScriptを書く時で大掛かりなものでないときはnpm-scriptsにbashのコマンドを書くのだけど、 fswatchコマンドで監視させていたらVimでの保存時に2度同じコマンドが実行されていることに気がついた。

$ fswatch -r source | xargs -I{} command

というふうに書いていたのだけど、どうもVimが一時保存ファイルを作る設定にしているせいで2度実行されているみたいだった。 おそらくEmacsやSublime Textにもあるはず。Atomic Saveとか言うのかな。

fswatchは変更があったファイル名を出力するので、grepでフィルターすれば大丈夫だった。

$ fswatch -r source | grep -E '\.js$' --line-buffered | xargs -I{} command

grepじゃなくてもsedのpとか、awkでもよかったかもしれない。

fswatchの-iも試してみたのだけど、意味が違うのか思ったようには動作してくれなかった。