fswatch 只监视某个文件扩展名

fswatch to watch only a certain file extension

我正在使用 fswatch 并且只希望它在扩展名为 .xxx 的文件是 modified/created 等时触发。文档和下面的第二个参考表明:

问题:用于排除所有不[=39=的文件的正则表达式是什么] 匹配 .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,然后匹配 end[= $.

  • 路径的 48=]

最后的命令是:

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

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