web-dev-qa-db-ja.com

フォルダOSXでファイルの変更を監視してから、bashスクリプトを実行します

重複の可能性:
OS XおよびUbuntuでファイルシステムをリアルタイムで監視

OSXのローカルディレクトリを監視する効率的な方法を探しています。そのディレクトリでファイルが変更されている場合は、bashスクリプトを実行してファイルをgithubにコミットします。

ファイルの変更についてディレクトリを監視し、アクションをトリガーするための推奨ツール、つまりbashスクリプトはありますか?

10
Tegan Snyder

リポジトリから fswatch を使用する:

fswatch . 'git commit -avm "snapshot at ${date}"'

この簡単な例では、すでにリポジトリにあるファイルへの変更のみをキャッチします。

19
Pierre Carrier

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を参照してください。

2
Lri