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

kra*_*r65 8 macos monitor sh inotifywait fswatch

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

inotifywait -r -m 'myfolder/' | while read MODFILE
do
    echo "something"
done
Run Code Online (Sandbox Code Playgroud)

由于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
Run Code Online (Sandbox Code Playgroud)

当我在tesfswatch/文件夹中更改或添加文件时,这些命令似乎都没有做任何事情.

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

Enr*_*omo 14

正如Bushmills已经说过的那样,fswatch在合并之后语法在v.> = 1.x中发生了变化fsw:这个决定背后的基本原理是允许使用对UNIX用户来说很自然的语法来监视多个路径.

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

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

$ fswatch -0 [opts] [paths] | xargs -0 -n 1 -I {} [command]
Run Code Online (Sandbox Code Playgroud)

这条路:

  • fswatch -0将使用该NUL字符拆分记录.
  • xargs -0将使用该NUL字符拆分记录.这需要正确匹配阻抗fswatch.
  • xargs -n 1将调用command每个命令.如果你想每个x记录都这样做,那就用吧xargs -n x.
  • xargs -I {}将用解析的参数替换{}in的出现command.如果您正在运行的命令不需要事件路径名,请删除此选项.

希望这可以帮助.


Del*_*ser 2

与 1.0 及更高版本相比,fswatch 1.0 之前的版本使用略有不同的调用语法。确保您运行的版本高于 1.0,如果您的版本早于该版本,您可能需要升级。