Ant 模式匹配 - * 与 **
Ant Pattern Matching - * vs. **
我们正在使用 TeamCity 生成 *.nupkg
我们不想清理的工件。 TeamCity 提供了一个字段,您可以在其中指定 ANT 样式的模式来指示要清理或不想清理哪些文件。让我们暂时假设我们有以下不想清理的文件:
/a.nupkg
/dir1/b.nupkg
/dir1/dir2/c.nupkg
*.nupkg
模式是否匹配根目录和所有子目录中的 .nupkg
文件,还是需要使用 **.*nupkg
遍历所有目录?
我阅读了以下文档,但这对我来说仍然是模棱两可的:http://ant.apache.org/manual/dirtasks.html#patterns
如果有 Ant-Pattern 测试器(类似于 http://regexpal.com/)那就太棒了。
匹配所有目录中的所有文件(从基目录开始及更深)
**/*.nupkg
将匹配
sample.nupkg
sample-2.nupkg
tmp/sample.nupkg
tmp/other.nupkg
other/new/sample.nupkg
**
将匹配任何目录(多个目录深)。
*.nupkg
将匹配具有 nupkg 扩展名的任何文件。或者只是 *
将匹配任何文件或任何目录(但只是一个目录深度)。
PS: 没有Ant Pattern Tester.
为了测试您的模式,一种简单的方法是将您的文件集内容回显到标准输出或文件,f.e。 :
<project>
<fileset dir="..." id="foobar">
<include name="..."/>
<!-- .. -->
</fileset>
<!-- simple echo -->
<echo>${toString:foobar}</echo>
<!-- use pathconvert for listing files line by line -->
<pathconvert property="foo" pathsep="${line.separator}" refid="foobar"/>
<!-- simple echo -->
<echo>${foo}</echo>
<!-- print to file -->
<echo file="whatever.txt">${foo}</echo>
<!-- use nested mapper if you need only basename -->
<pathconvert property="fooflat" pathsep="${line.separator}" refid="foobar">
<mapper>
<flattenmapper />
</mapper>
</pathconvert>
<echo>$${fooflat} => ${line.separator}${fooflat}</echo>
<!-- to combine several filesets use -->
<path id="fooo">
<fileset dir="...">
<include name=".."/>
</fileset>
<fileset>
<!-- ... -->
</fileset>
<fileset>
<!-- ... -->
</fileset>
<!-- ... -- >
</path>
<echo>$${fooo} => ${fooo}</echo>
</project>
我们正在使用 TeamCity 生成 *.nupkg
我们不想清理的工件。 TeamCity 提供了一个字段,您可以在其中指定 ANT 样式的模式来指示要清理或不想清理哪些文件。让我们暂时假设我们有以下不想清理的文件:
/a.nupkg
/dir1/b.nupkg
/dir1/dir2/c.nupkg
*.nupkg
模式是否匹配根目录和所有子目录中的 .nupkg
文件,还是需要使用 **.*nupkg
遍历所有目录?
我阅读了以下文档,但这对我来说仍然是模棱两可的:http://ant.apache.org/manual/dirtasks.html#patterns
如果有 Ant-Pattern 测试器(类似于 http://regexpal.com/)那就太棒了。
匹配所有目录中的所有文件(从基目录开始及更深)
**/*.nupkg
将匹配
sample.nupkg
sample-2.nupkg
tmp/sample.nupkg
tmp/other.nupkg
other/new/sample.nupkg
**
将匹配任何目录(多个目录深)。
*.nupkg
将匹配具有 nupkg 扩展名的任何文件。或者只是 *
将匹配任何文件或任何目录(但只是一个目录深度)。
PS: 没有Ant Pattern Tester.
为了测试您的模式,一种简单的方法是将您的文件集内容回显到标准输出或文件,f.e。 :
<project>
<fileset dir="..." id="foobar">
<include name="..."/>
<!-- .. -->
</fileset>
<!-- simple echo -->
<echo>${toString:foobar}</echo>
<!-- use pathconvert for listing files line by line -->
<pathconvert property="foo" pathsep="${line.separator}" refid="foobar"/>
<!-- simple echo -->
<echo>${foo}</echo>
<!-- print to file -->
<echo file="whatever.txt">${foo}</echo>
<!-- use nested mapper if you need only basename -->
<pathconvert property="fooflat" pathsep="${line.separator}" refid="foobar">
<mapper>
<flattenmapper />
</mapper>
</pathconvert>
<echo>$${fooflat} => ${line.separator}${fooflat}</echo>
<!-- to combine several filesets use -->
<path id="fooo">
<fileset dir="...">
<include name=".."/>
</fileset>
<fileset>
<!-- ... -->
</fileset>
<fileset>
<!-- ... -->
</fileset>
<!-- ... -- >
</path>
<echo>$${fooo} => ${fooo}</echo>
</project>