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的解决方案了吗?有人会如何修改它以查找多个文件扩展名?