OSXのローカルディレクトリを監視する効率的な方法を探しています。そのディレクトリでファイルが変更されている場合は、bashスクリプトを実行してファイルをgithubにコミットします。
ファイルの変更についてディレクトリを監視し、アクションをトリガーするための推奨ツール、つまりbashスクリプトはありますか?
リポジトリから fswatch を使用する:
fswatch . 'git commit -avm "snapshot at ${date}"'
この簡単な例では、すでにリポジトリにあるファイルへの変更のみをキャッチします。
1つのオプションは、launchdを使用することです。このようなプロパティリストを~/Library/LaunchAgents/com.superuser.445907.plist
として保存し、launchctl load ~/Library/LaunchAgents/com.superuser.445907.plist
を使用して、またはログアウトして再度ログインすることでロードします。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.Apple.com/DTDs/PropertyList-1.0.dtd>
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.superuser.445907</string>
<key>Program</key>
<string>/Users/username/script</string> <!-- ~/ doesn't work -->
<key>WatchPaths</key>
<array>
<string>/Users/username/Folder/</string>
</array>
<key>ThrotteInterval</key>
<integer>0</integer> <!-- run at most every 0 seconds, by default 10 -->
</dict>
</plist>
Launchedは、ファイルがアトミックに保存されたとき、またはファイルが保存されるたびに削除および再作成されたときにのみ、ファイルへの変更を登録します。ほとんどのOSXアプリケーションはデフォルトでアトミック保存を実行しますが、たとえばTextMateとvimは実行しません。監視フォルダーのサブフォルダーの変更は検出されません。
launchctl unload $path && launchctl load $path
は変更をplistに適用します。
詳細については、man launchd
およびman launchd.plist
を参照してください。