如何使用FSWatch在Mac OSX上监视文件更改?

12

我正在尝试使用fswatch将以下行从Linux Bash脚本转换为在Mac OSX上运行:

inotifywait -r -m 'myfolder/' | while read MODFILE
do
    echo "something"
done

由于在Mac OSX上inotifywait无法正常工作,我想用FSWatch替换第一行。虽然自述文件提到了fswatch手册,但没有给出链接,而在互联网上搜索也没有找到。所以我尝试了一些操作。

我创建了一个名为testfswatch/的文件夹,并尝试在父文件夹中运行以下命令,然后添加和更改testfswatch/文件夹中的文件:

fswatch -o testfswatch/ | echo "LALA"
fswatch -o testfswatch/ | someSimpleProgram
fswatch -o testfswatch/ | xargs -n1 -I{} echo "LALA"
fswatch -o testfswatch/ | xargs -n1 -I{} ./someExecutable
fswatch -o testfswatch/ | xargs -n1 echo "LALA"
fswatch -o testfswatch/ | xargs -n1 someExecutable
// And more variations of the above

当我更改或添加tesfswatch/文件夹中的文件时,这些命令似乎都没有起作用。

有人知道我在这里做错了什么吗?欢迎任何提示!


@Bushmills - 啊!我确实在版本0.0.2上。我刚刚升级到版本1.3.7,现在似乎一切正常了!非常感谢!附言:如果您将您的评论添加为答案,我可以接受它。 - kramer65
2个回答

20

正如Bushmills所说,自从fswatchfsw合并后,在v.>= 1.x中fswatch的语法已经改变:这个决定的理由是允许使用一种对UNIX用户来说更自然的语法来监视多个路径。

此外,还添加了一个特定的选项(-0),以便轻松、不容易出错地将fswatch的输出传输到另一个程序的输入中:当使用-0时,fswatch将使用NUL字符(类似于其他实用程序如findxargs所做的那样)分隔记录。

因此,在你的情况下,你可能想要使用以下语法(根据你的需要进行微调):

$ fswatch -0 [opts] [paths] | xargs -0 -n 1 -I {} [command]

这样做:

  • fswatch -0 使用 NUL 字符分割记录。
  • xargs -0 使用 NUL 字符分割记录。这是必须的,以便正确地匹配 fswatch 的阻抗。
  • xargs -n 1 每个命令会调用一次 command。如果您想每隔 x 条记录执行一次,则使用 xargs -n x
  • xargs -I {} 将在 command 中用解析出来的参数替换 {} 出现的位置。如果运行的命令不需要事件路径名称,请删除此选项。

希望这会有所帮助。


我们如何监视特定的文件类型? - Dzung Nguyen
我会使用包含/排除过滤器。它们的用法在man页和PDF文档中都有记录,链接为:https://drive.google.com/folderview?id=0BxZtP9CHH-Q6bHF3bmJGRmlVcVU&usp=sharing。您可以设置一个排除过滤器来过滤掉所有内容,如 -E ".*",然后添加一个包含过滤器以添加您想要的模式,如 -Ie ".*\.js"。但是,您应该提出一个不同的问题,因为这与原始问题无关。 - Enrico M. Crisostomo
只是一个快速的提示:我尝试在fswatch 1.4.7版本中使用-E ".*"但没有成功。使用包含筛选器的-e ".*"可以工作。例如:fswatch -0 -e ".*" -i ".html" tmp/capybara/ - Philip Sampaio
很抱歉我拼错了选项:-e指定排除过滤器,而-E告诉fswatch使用扩展正则表达式。由于包含过滤器始终优先于排除过滤器,无论选项的顺序如何,那么你现在所做的是正确的:你排除了所有内容,但包括与.html匹配的文件。建议:如果您想将.html作为扩展名进行过滤,也许您更愿意使用.html$ - Enrico M. Crisostomo

2

fswatch的pre-1.0版本与1.0及之后版本比较,使用略有不同的调用语法。请确保您正在运行1.0以上的版本,如果您的版本旧于此,请考虑升级。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接