排除匹配项的文件模式
filepatterns to exclude a match
Shake 使用各种形式的匹配,文件路径与模式。有没有可以用来排除模式的?
示例:
我有三个目录 a, b, c
(在目录 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.html
的推荐方法在这里是不可能的,因为文件是用其他需要常规 html
扩展名的程序处理的。
或者
规则:
pattern %> action
相当于:
(pattern ?==) ?> action
所以你可以这样写:
(\x -> "//*.html" ?== x && not ("c//*.html" ?== x) ?> action
匹配规则匹配 //*.html
,但不匹配 c//*.html
。
更一般地说,根本不需要使用 FilePattern
?==
运算符,因此可以使用任意匹配谓词。
有了建议(尤其是关于使用 **/*.html
的提示),我已经开始工作了。
路径 bakedD
是 staticD
的前缀,第一个规则只处理 bakedD
中不在 staticD
中的文件,另一个只处理这些文件:
(\x -> ((bakedD <> "**/*.html") ?== x)
&& not ((staticD <> "**/*.html") ?== x)) ?> \out -> do
let md = doughD </> (makeRelative bakedD $ out -<.> "md")
runErr2action $ bakeOneFileFPs md doughD templatesD out
(staticD <> "**/*.html" ) %> \out -> do
copyFileChanged (replaceDirectory out doughD) out
两条规则之间没有重叠。
我希望这对遇到相同类型问题的其他人有用。
Shake 使用各种形式的匹配,文件路径与模式。有没有可以用来排除模式的?
示例:
我有三个目录 a, b, c
(在目录 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.html
的推荐方法在这里是不可能的,因为文件是用其他需要常规 html
扩展名的程序处理的。
或者
规则:
pattern %> action
相当于:
(pattern ?==) ?> action
所以你可以这样写:
(\x -> "//*.html" ?== x && not ("c//*.html" ?== x) ?> action
匹配规则匹配 //*.html
,但不匹配 c//*.html
。
更一般地说,根本不需要使用 FilePattern
?==
运算符,因此可以使用任意匹配谓词。
有了建议(尤其是关于使用 **/*.html
的提示),我已经开始工作了。
路径 bakedD
是 staticD
的前缀,第一个规则只处理 bakedD
中不在 staticD
中的文件,另一个只处理这些文件:
(\x -> ((bakedD <> "**/*.html") ?== x)
&& not ((staticD <> "**/*.html") ?== x)) ?> \out -> do
let md = doughD </> (makeRelative bakedD $ out -<.> "md")
runErr2action $ bakeOneFileFPs md doughD templatesD out
(staticD <> "**/*.html" ) %> \out -> do
copyFileChanged (replaceDirectory out doughD) out
两条规则之间没有重叠。
我希望这对遇到相同类型问题的其他人有用。