【问题标题】:fswatch to watch only a certain file extension [closed]fswatch 仅观看某个文件扩展名 [关闭]
【发布时间】:2016-04-15 06:35:26
【问题描述】:

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

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

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

参考资料:

平台:

  • MacOS 10.9.5.

【问题讨论】:

    标签: macos watch fswatch


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 有人会如何修改它以查找多个文件扩展名?
    【解决方案2】:

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

    • 您想排除所有内容
    • 您希望包含具有给定扩展名 ext 的文件。

    即:

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

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

    最后的命令是:

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

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

    【讨论】:

    • 这在 linux 上对我不起作用,我根本没有收到任何事件。我可以在你的 github repo 上创建一个详细的 issue,但是自 3 月以来的每个 issue 都有 0 个回复。
    • @erandros 我也遇到了类似的问题(起初没有输出,不久之后一些输出不可靠)。使用不同的显示器 (-m poll_monitor) 似乎工作正常。
    • 我无法让它与在 VirtualBox 中运行的 Linux (Xubuntu 20.04) 一起工作。奇怪的是,当我指定 -m inotify 时,我得到“无效的监视器名称”。没有过滤器,一切都按预期工作
    • 这是一个节省时间的方法。谢谢你。我猜想只包含一个文件类型,排除所有其他文件类型,但我不知道反斜杠会加倍。
    • @erandros 你找到 linux 的解决方案了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    相关资源
    最近更新 更多