对于这样的文件集:
XXX_staging
A_filenameA_filename.txt
B_filenAmeB_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似乎不在。
我该怎么做?
文件名选择器可以使用正则表达式。
示例1├── 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
build . xml
<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>
示例2 - 使用ant从源目录复制文件到目标目录
不幸的是,ant模式不是正则表达式,一点也不是。它们是通配符,语法非常有限。对于复杂的解决方案,您可以使用在Javascript中定义自己的任务并编写一些内容,但这将不允许您创建替代文件集模式匹配语法。