在Ant脚本中复制文件时删除最后一个目录

时间:2014-11-19 13:35:19

标签: regex ant

如何将文件复制到一级目录?

我查看了cutdirsmapper但它删除了前导目录,而我想删除最后一个目录。从手册中的示例中,源文件名foo/bar/A.txt应复制到foo/A.txt

这是我到目前为止所做的:

<copy todir="../vendor">
    <fileset dir="${resources}" includes="Bootstrap/2.2.1/" />
    <fileset dir="${resources}" includes="FontAwesome/4.2.0/" />
    <fileset dir="${resources}" includes="jQuery/2.1.1/" />
</copy>

我最终使用包含第三方库的../vendor/Bootstrap/2.2.1/等文件夹,但我希望将${resources}/Bootstrap/2.2.1/的内容复制到../vendor/Bootstrap/

我尝试过使用这样的regexpmapper

<regexpmapper from="^(.*)/([^/]+)/([^/]*)$$" to="\1/\3" handledirsep="true" />

由于Bootstrap/2.2.1/内的子文件夹(例如cssjsimg等),这不起作用。)

2 个答案:

答案 0 :(得分:0)

经过进一步调查后,这个regexpmapper似乎完成了这项工作:

<regexpmapper from="^([^\/]+)/[^\/]+/(.*)$$" to="\1/\2" handledirsep="true" />

答案 1 :(得分:0)

scriptmapper怎么样?

实施例

├── build.xml
├── src
│   └── foo
│       └── bar
│           ├── 1.0
│           │   └── B.txt
│           └── A.txt
└── target
    └── foo
        ├── A.txt
        └── bar
            └── B.txt

的build.xml

<project name="demo" default="build">

  <target name="build">

    <copy todir="target" includeEmptyDirs="false">
      <fileset dir="src"/>
      <scriptmapper language="javascript">
        importClass(java.io.File);

        src = new File(source);
        trg = new File(src.getParentFile().getParentFile(), src.getName());

        self.addMappedName(trg);
      </scriptmapper>
    </copy>

  </target>

</project>