如果存在具有相同名称的文件且末尾具有特定后缀,则复制文件集中的文件

时间:2013-11-06 23:17:44

标签: ant

我正在使用第三方构建脚本使用名为“someFile.js”的缩小文件和名为“someFile.js.uncompressed.js”的未缩小版本创建缩小的js文件。我需要build.xml中的一个任务,只将具有伙伴'.uncompressed.js'文件的js文件复制到另一个位置。例如,给定这样的目录结构:

- rootDirectory
  - minified.js
  - minified.js.uncompressed
  - unminified.js
  - anotherDirectory
    - anotherMinified.js
    - anotherMinified.js.uncompressed.js
    - unminified.js
    - anotherUnminified.js

目标目录应该像这样结束:

- rootDirectory
  - minified.js
  - anotherDirectory
    - anotherMinified.js

有没有办法用蚂蚁来实现这个目标?我正在使用ant 1.8.1。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

您可以使用Ant <present> selector来执行此操作。例如:

<copy todir="dest">
    <fileset dir="src">
        <present targetdir="src">
            <mapper type="glob" from="*" to="*.uncompressed.js" />
        </present>
    </fileset>
</copy>

在这种情况下,选择器中的targetdir与文件集的根目录相同。

这样做是复制src目录树中的任何文件,其中附加了.uncompressed.js的同名文件也会出现。

答案 1 :(得分:1)

您可以为文件集使用自定义scriptselector

实施例

├── build.xml
├── src
│   └── rootDirectory
│       ├── anotherDirectory
│       │   ├── anotherMinified.js
│       │   ├── anotherMinified.js.uncompressed
│       │   ├── anotherUnminified.js
│       │   └── unminified.js
│       ├── minified.js
│       ├── minified.js.uncompressed
│       └── unminified.js
└── target
    └── rootDirectory
        ├── anotherDirectory
        │   └── anotherMinified.js
        └── minified.js

的build.xml

<project name="demo" default="copy-files">

   <target name="copy-files">
      <copy todir="target">
         <fileset dir="src">
            <scriptselector language="javascript">
               importClass(java.io.File);
               var testForFile = new File("src/" + filename + ".uncompressed");
               self.setSelected(testForFile.exists());
            </scriptselector>
         </fileset>
      </copy>
   </target>

   <target name="clean">
      <delete dir="target"/>
   </target>

</project>

注意:

  • 这应该可以在不需要额外的罐子的情况下工作。现代JVM支持Javascript。