【问题标题】:Apache ant character selector in filename copy task文件名复制任务中的 Apache ant 字符选择器
【发布时间】:2015-08-09 04:54:37
【问题描述】:

对于这样的文件集:

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 似乎已经过时了。

我该怎么做?

【问题讨论】:

    标签: regex ant


    【解决方案1】:

    Filename selectors 可以使用正则表达式。

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

    【讨论】:

    • 好吧,这看起来像我要找的。谢谢。
    【解决方案2】:

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

    【讨论】:

    • 好的,正如我所怀疑的,谢谢。这有效:includes="**/A*.txt,**/L*.txt"&gt;(逗号分隔的列表),所以我现在可以列出从 A 到 L 的所有字母。然后也许会用我可以插入的 Javascript 做一些事情。
    猜你喜欢
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    相关资源
    最近更新 更多