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

How to watch file changes on Mac OSX using FSWatch?

我尝试使用fswatch从Linux bash脚本中转换以下行,以便能够在Mac OSX上运行它:

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

因为inotifywait在mac osx上不起作用,所以我想用fswatch代替第一行。虽然自述文件引用了fswatch的手册页,但它没有提供指向它的链接,而且在互联网上搜索也没有任何帮助。所以我试着乱转了一下。

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

1
2
3
4
5
6
7
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已经说过的那样,在与fsw合并后,fswatch语法在v.>=1.x中发生了变化:这一决定的基本原理是允许使用Unix用户感觉自然的语法来监视多条路径。

此外,添加了一个特定选项(-0以允许将fswatch输出的容易且不易出错的管道连接到另一个程序的输入:当使用-0时,fswatch将使用NUL字符(\0字符)分隔记录(沿着其他实用程序(如findxargs的行)。

那么,在您的情况下,您可能希望使用以下语法(根据需要对其进行微调):

1
$ 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.0及更高版本相比,1.0之前版本的fswatch使用稍微不同的调用语法。确保运行的版本高于1.0,如果您的版本高于1.0,则可能需要升级。