【发布时间】:2016-04-15 06:35:26
【问题描述】:
我正在使用fswatch,并且只希望它在扩展名为.xxx 的文件被修改/创建等情况下触发。下面的文档和第二个参考表明:
- 默认情况下接受所有路径,除非排除过滤器另有说明。
- 包含过滤器可以覆盖任何排除过滤器。
- 命令行中过滤器定义的顺序没有影响。
问题:使用什么正则表达式排除所有不匹配.xxx扩展名的文件?
参考资料:
平台:
- MacOS 10.9.5.
【问题讨论】:
我正在使用fswatch,并且只希望它在扩展名为.xxx 的文件被修改/创建等情况下触发。下面的文档和第二个参考表明:
问题:使用什么正则表达式排除所有不匹配.xxx扩展名的文件?
【问题讨论】:
您可以像这样监视单个扩展名的文件的更改:
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,然后将路径的 end 与 $ 匹配.
最后的命令是:
$ fswatch [options] -e ".*" -i "\\.ext$"
如果您想要不区分大小写 过滤器(例如匹配eXt、Ext 等),只需添加-I 选项。
【讨论】:
-m poll_monitor) 似乎工作正常。
-m inotify 时,我得到“无效的监视器名称”。没有过滤器,一切都按预期工作