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


8

是否有人知道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...

Answers:


6

您可以使用launchd进行设置。具体来说,您需要使用启动的plist中的watchpaths键来查找该文件中的更改。

此AFP548文章中提供了详尽的信息。

尽管似乎不再在开发中了,但是Lingon是一个应用程序,它提供了GUI方式来设置这些启动的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

您可以在Automator中完成。我相信它在自动工作流程中的“文件夹选项”下(而不是在Mac之前)。然后,您只需将脚本附加到该文件夹​​,该脚本将在每次添加/更改文件时触发。


我不太明白。我是Automator的新手,但据我所知,您无法选择何时执行脚本,而只能选择运行脚本时执行的操作。我也可以使用Mac OS中的文件夹操作,但我发现AppleScript仅具有“向文件夹添加项目”操作,而没有“在文件夹中更改项目”这样的操作。
约翰内斯

您是正确的@Johannes。虽然有用于添加文件夹项,删除文件夹项,移动文件夹窗口,关闭文件夹窗口和打开文件夹的文件夹操作,但是没有用于检测文件更改的文件夹操作。您可以通过在Applescript编辑器中打开StandardAdditions.osax词典来查看此内容。
ghoppe
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.