对于这样的文件集:
XXX_staging
A_filename\A_filename.txt
B_filenAme\B_filenAme.txt
XXX_AL_staging
以下ant目标只会将名称以大写" A"开头的文件从XXX_staging文件夹复制到XXX_AL_staging文件夹:
<target name="split_topics">
<copy todir="XXX_AL_staging\" verbose="true" overwrite="true">
<fileset dir=".\XXX_staging" includes="**/A*.txt">
</fileset>
</copy>
</target>
我想要做的只是复制名称以A到L开头的文件。这不起作用:
<target name="split_topics">
<copy todir="XXX_AL_staging\" verbose="true" overwrite="true">
<fileset dir=".\XXX_staging" includes="**/[A-L]*.txt">
</fileset>
</copy>
</target>
我想知道问题是第二个不仅仅是像第一个那样的通配符匹配,而是一个正常的表达式匹配,它不能用于文件名吗?我不想匹配文件的内容,只是文件名,所以containsregexp似乎已经出来了。
我该怎么做?
答案 0 :(得分:4)
Filename selectors可以使用正则表达式。
├── build.xml
├── src
│ └── somedir
│ ├── A_filename.txt
│ ├── B_filename.txt
│ ├── C_filename.txt
│ ├── D_filename.txt
│ ├── E_filename.txt
│ ├── F_filename.txt
│ └── G_filename.txt
└── target
└── somedir
├── A_filename.txt
├── B_filename.txt
├── C_filename.txt
└── D_filename.txt
<project name="demo" default="copy">
<property name="src.dir" location="src"/>
<property name="build.dir" location="target"/>
<target name="copy">
<copy todir="${build.dir}" overwrite="true" verbose="true">
<fileset dir="${src.dir}">
<filename regex="\/[A-D].*.txt$"/>
</fileset>
</copy>
</target>
</project>
答案 1 :(得分:0)
不幸的是,ant patterns不是正则表达式,甚至不是一点。它们是通配符,语法非常有限。对于复杂的解决方案,您可以使用在Javascript中定义自己的任务并编写代码的功能,但这不会让您创建替代文件集模式匹配语法。