繁体   English   中英

文件名复制任务中的Apache ant字符选择器

[英]Apache ant character selector in filename copy task

对于这样的文件集:

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似乎已经淘汰了。

我该怎么做呢?

文件名选择器可以使用正则表达式。

例子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

不幸的是, 蚂蚁模式不是正则表达式,甚至不是。 它们是语法非常有限的通配符。 对于复杂的解决方案,您可以使用在Javascript中定义自己的任务并编写一些内容的功能,但这不能让您创建替代的文件集模式匹配语法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM