如何使用FSWatch在Mac OSX上观看文件更改?

时间:2014-07-04 11:48:18

标签: macos sh monitor inotifywait fswatch

我尝试使用fswatch从linux bash脚本翻译以下行,以便能够在Mac OSX上运行它:

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

由于inotifywait不能在Mac OSX上运行,我想用第一行代替FSWatch。尽管README引用了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/文件夹中更改或添加文件时,这些命令似乎都没有做任何事情。

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

2 个答案:

答案 0 :(得分:13)

正如Bushmills已经说过的那样,fswatch语法在与fsw合并之后在v。> = 1.x中发生了变化:这个决定背后的理由是允许不止一条路径使用UNIX用户感觉很自然的语法观看。

此外,还添加了一个特定选项(-0),以便轻松且不容错误地将fswatch输出到另一个程序的输入:使用-0时,fswatch将使用NUL\0)字符(与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的出现次数。如果您正在运行的命令不需要事件路径名,请删除此选项。

希望这有帮助。

答案 1 :(得分:2)

与1.0及更高版本相比,

1.0版之前的fswatch使用稍微不同的调用语法。 确保您运行的版本低于1.0,如果您的版本早于此版本,则可能需要升级。