我正在寻找一种有效的方法来监视 OSX 中的本地目录,如果该目录中的任何文件发生了更改,则运行 bash 脚本将文件提交到 github。
有没有推荐的工具可以监视目录中的文件变化,然后触发操作,例如 bash 脚本?
答案1
答案2
一种选择是只使用 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>
Launchd 仅在文件自动保存或每次保存时删除并重新创建文件时记录对文件的更改。大多数 OS X 应用程序默认执行自动保存,但 TextMate 和 vim 等应用程序则不执行此操作。无法检测到监视文件夹的子文件夹中的更改。
launchctl unload $path && launchctl load $path
将更改应用于 plist。
请参阅man launchd
和man launchd.plist
以了解更多信息。