Mac でファイルの変更を検出する: fswatch の使い方
- ファイルの変更をリアルタイムで検出して、自動的にスクリプトを実行したかった
- 近いのが Mac で標準的に使える「フォルダアクション」だけど、こちらはフォルダにファイルが追加されたタイミングでしかアクションできない
fswatch
というツールを使ってファイル監視ができそうだったので、基本的な使い方をメモ
fswatch のインストール
- Homebrew を使ってインストール
brew install fswatch
fswatch の基本的な使い方
- 基本的な使い方は次の通り
fswatch [options] [path]
- たとえば、特定のフォルダ(
/path/to/watched/folder
)を監視して、変更があったときに何かを出力したい場合、次のようにする
fswatch /path/to/watched/folder
- このコマンドでは、監視しているフォルダ内でファイルが追加、削除、変更されるたびに、変更されたファイルのパスを出力する
スクリプトと連携する
fswatch
は他のコマンドやスクリプトと組み合わせて使用することができる- たとえば、フォルダの変更を検出したら自動でスクリプトを実行するには、以下のように
xargs
を使う
fswatch -o /path/to/watched/folder | xargs -n1 -I{} /path/to/your/script.sh
-o
は、イベント発生時に変更の数を出力し、xargs
はその出力を受け取り、スクリプトを実行するオプション-I{}
は、xargs によって受け取った引数(この場合はイベントの数)をスクリプトに渡すためのプレースホルダ
具体的な使い方
- たとえば、フォルダ内の Markdown ファイルが更新されたら、HTMLに変換して特定のディレクトリに保存するスクリプトを実行する設定を考えてみる
- 監視対象のフォルダにMarkdownファイルがあるとする
fswatch
を使用して、そのフォルダを監視- ファイルに変更があった場合、Pandoc を使用して Markdown から HTML へ変換
fswatch -o /path/to/markdown/folder | xargs -n1 -I{} pandoc /path/to/markdown/folder/input.md -o /path/to/html/output.html