Macos fswatch仅监视某个文件扩展名

Macos fswatch仅监视某个文件扩展名,macos,watch,fswatch,Macos,Watch,Fswatch,我使用的是fswatch,仅当扩展名为.xxx的文件被修改/创建时,我才希望触发它。下面的文档和第二个参考说明: 默认情况下接受所有路径,除非排除筛选器另有说明 包含筛选器可以覆盖任何排除筛选器 命令行中过滤器定义的顺序无效 问题:用于排除所有与.xxx扩展名不匹配的文件的正则表达式是什么 参考资料: 站台: MacOS 10.9.5 您可以查看单个扩展名文件的更改,如下所示: fswatch -e ".*" -i ".*/[^.]*\\.xxx$" . 这将排除所有文件,然后包

我使用的是
fswatch
,仅当扩展名为
.xxx
的文件被修改/创建时,我才希望触发它。下面的文档和第二个参考说明:

  • 默认情况下接受所有路径,除非排除筛选器另有说明
  • 包含筛选器可以覆盖任何排除筛选器
  • 命令行中过滤器定义的顺序无效
问题:用于排除所有与
.xxx
扩展名不匹配的文件的正则表达式是什么

参考资料:
站台:
  • MacOS 10.9.5

您可以查看单个扩展名文件的更改,如下所示:

fswatch -e ".*" -i ".*/[^.]*\\.xxx$" .
这将排除所有文件,然后包括以
.xxx
结尾的所有路径(也排除以点开头的文件)

如果要对文件更改运行命令,可以添加以下内容:

fswatch -e ".*" -i ".*/[^.]*\\.xxx$" -0 . | xargs -0 -n 1 -I {} echo "File {} changed"

我是
fswatch
作者。它可能不是很直观,但是
fswatch
包含所有内容,除非排除过滤器另有说明。问题来了:您希望包含具有给定扩展名的所有文件。根据排除和包含过滤器重新措辞:

  • 你想排除一切
  • 您希望包含具有给定扩展名的文件
    ext
即:

  • 要排除所有内容,可以添加与任何字符串匹配的排除筛选器:
    *

  • 要包含具有给定扩展名的文件
    ext
    ,请添加一个包含筛选器,该筛选器匹配以
    .ext
    结尾的任何路径:
    \\\.ext$
    。在这种情况下,您需要转义点
    以匹配文字点,然后转义扩展名
    ext
    ,然后将路径末尾与
    $
    匹配

最后的命令是:

$ fswatch [options] -e ".*" -i "\\.ext$"

如果您想要不区分大小写的过滤器(例如,匹配
eXt
eXt
等),只需添加
-I
选项。

这在linux上不适用,我根本没有得到任何事件。我可以在您的github回购上创建一个详细的问题,但自3月份以来的每一个问题都有0个回复。@erandros我也遇到了类似的问题(最初没有输出,很快就有一些不可靠的输出)。使用不同的监视器(
-m poll\u monitor
)似乎可以正常工作。在VirtualBox中运行的Linux(Xubuntu 20.04)上,我无法实现这一点。奇怪的是,当我指定
-m inotify
时,我得到了“无效的监视器名称”。没有过滤器,一切都能正常工作,这是一个省时的方法。非常感谢。我猜只包含一个文件类型,不包括所有其他文件类型,但我不知道要加倍使用反斜杠。@erandros您找到linux的解决方案了吗?有人会如何修改它以查找多个文件扩展名?