首页 > 解决方案 > 排除匹配的文件模式

问题描述

Shake 使用各种形式的匹配,文件路径对模式。有没有可以用来排除模式的?

示例:我有三个目录a, b, c(在 directory 中的某个位置x),每个目录都需要html文件。有一个规则

(dir <> "//*.html") %> \out -> do -- deal with a and b

它应该只处理目录 a 和 b 以及处理 c 中文件的类似规则。

有没有办法(可能使用?>)将两个规则分开

(\f -> "x" prefixOf f && not "x/c" prefixOf f) <> "//*.html")
(\f -> "x/x" prefixOf f ) <> "//*.html")

和其他类似?

推荐的使用方法在这里是不可能的,因为文件是用其他需要常规扩展名的程序处理xx.a.html的。xx.b.htmlhtml

或者

标签: shake-build-system

解决方案


规则:

pattern %> action

相当于:

(pattern ?==) ?> action

所以你可以写:

(\x -> "//*.html" ?== x && not ("c//*.html" ?== x) ?> action

匹配规则匹配//*.html,但不匹配c//*.html

更一般地说,根本不需要使用FilePattern ?==运算符,因此可以使用任意匹配的谓词来代替。


推荐阅读