在 Mac OS X 上文件更改时运行脚本

在 Mac OS X 上文件更改时运行脚本

有谁知道一个适用于 Mac OS 的程序,可以将名称传递给可执行文件和要监视的文件,以便每次被监视的文件发生变化时它都会运行该可执行文件?

我想到的是这样的:

$ fwatch /Users/foo/doc.tex /Users/foo/run-pdflatex.sh &
  fwatch running. Listening for changes in /Users/foo/doc.tex.
$ echo "This aint no LaTeX" > doc.tex
$ fwatch: Change in /Users/foo/doc.tex detected. Running /Users/foo/run-pdflatex.sh...

答案1

您可以使用以下方式进行设置启动。具体来说,您需要使用监视路径键入您的 launchd plist 来查找该文件中的更改。

详尽信息可在这篇 AFP548 文章

虽然它似乎不再被开发,林贡是一个提供 GUI 方式来设置这些 launchd plist 文件的应用程序。

编辑:

大致来说,以下是使用上述示例路径的操作。将com.superuser.run-pdflatex.plist包含以下内容的文件保存到~/Library/LaunchAgents

<?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.run-pdflatex</string>
    <key>OnDemand</key>
    <true/>
    <key>Program</key>
    <string>/Users/foo/run-pdflatex.sh</string>
    <key>ProgramArguments</key>
    <array>
            <string>run-pdflatex.sh</string>
    </array>
    <key>WatchPaths</key>
    <array>
            <string>/Users/foo/doc.tex</string>
    </array>
    </dict>
</plist>

然后您可以launchctl load ~/Library/LaunchAgents/com.superuser.run-pdflatex.plist在终端中输入内容来加载文件监视守护程序。

以上内容尚未经过测试,但这是总体思路。

答案2

我发现样本它自称是“一个跨平台的文件变化监视器”,并且似乎支持所有适当的平台解决方案,例如 macOS 上的文件系统事件。

# Monitor all files in a directory, execute script once when something changes
fswatch -o -r path/to/directory | xargs -n1 -I{} your-command-here

答案3

您可以在 Automator 中执行此操作。我相信它位于 Automator 工作流程中的文件夹选项下(而不是在 Mac 前面)。然后您只需将脚本附加到文件夹,每次添加/更改文件时它都会触发。

相关内容