16

我正在使用fswatch并且只希望在修改/创建带有扩展名的文件等时触发它.xxx。下面的文档和第二个参考表明:

  • 默认情况下接受所有路径,除非排除过滤器另有说明。
  • 包含过滤器可以覆盖任何排除过滤器。
  • 命令行中过滤器定义的顺序没有影响。

问题:用于排除所有与扩展名匹配的文件的正则表达式是什么?.xxx

参考:

平台:

  • macOS 10.9.5。
4

2 回答 2

47

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

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

那是:

  • 要排除所有内容,您可以添加匹配任何字符串的排除过滤器:.*.

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

最后的命令是:

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

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

于 2016-05-15T11:25:21.007 回答
4

您可以像这样监视单个扩展名的文件的更改:

fswatch -e ".*" -i ".*/[^.]*\\.xxx$" .

这将排除所有文件,然后包括所有以.xxx(并排除以点开头的文件)的路径。

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

fswatch -e ".*" -i ".*/[^.]*\\.xxx$" -0 . | xargs -0 -n 1 -I {} echo "File {} changed"
于 2016-05-15T11:10:57.110 回答