监视文件夹 OSX 中的文件更改然后运行 ​​bash 脚本

监视文件夹 OSX 中的文件更改然后运行 ​​bash 脚本

可能重复:
在 OS X 和 Ubuntu 上实时查看文件系统

我正在寻找一种有效的方法来监视 OSX 中的本地目录,如果该目录中的任何文件发生了更改,则运行 bash 脚本将文件提交到 github。

有没有推荐的工具可以监视目录中的文件变化,然后触发操作,例如 bash 脚本?

答案1

使用样本来自你的存储库:

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

这个简单的例子只会捕获存储库中已有文件的更改。

答案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 launchdman launchd.plist以了解更多信息。

相关内容