在Ant中重命名动态命名的目录?

时间:2013-03-29 21:50:18

标签: ant

如何重命名目录有很多答案,但它们都需要知道确切的目录名称。就我而言,名称是动态生成的。我想做这样的事情,但由于我不能通配源代码目录,因此失败了:

<copy todir="./some/runtime/directory/mydir">
    <fileset dir="some/build/dir/mydir*"/> <!-- name is mydir_<timestamp> -->
</copy>

在bash中,我可以mv some/build/dir/mydir* some/runtime/dir/mydir。我正在尝试找到等效的蚂蚁命令。

3 个答案:

答案 0 :(得分:1)

如果它足以复制目录内容,那么只需清理你的构建文件夹,就可以试试这个:

<copy todir="./some/runtime/directory/mydir">
    <fileset dir="some/build/dir">
        <include name="**/mydir*/**/*" /> <!-- or just mydir/**/* -->
    </fileset>
</copy>

答案 1 :(得分:1)

我首先创建了一个属性,然后复制了它: -

<dirset id="my-dir-set" 
        dir="some/build/dir" includes="mydir*"/>
<property name="my-dir-name" refid="my-dir-set" />
<fail message="Must have exactly one directory - ${my-dir-name}">
    <condition>
        <resourcecount refid="my-dir-set" count="1" when="ne" />
    </condition>
</fail>
<move file="${my-dir-name}" 
      tofile="./some/runtime/directory/mydir" />

但是,如果你能保证dirset在没有测试的情况下是独一无二的: -

<move tofile="./some/runtime/directory/mydir">
    <dirset dir="some/build/dir" includes="mydir*" />
</move>

答案 2 :(得分:0)

我对同样的问题之以鼻。在没有找到答案的情况下,由于总是复制动态目录名称,因此我来到了此解决方案:

<copy todir="some/runtime/directory/myTargetDir">
    <fileset dir="some/build/dir" includes="mySourceDir_*/**/*"/>
    <cutdirsmapper dirs="1"/>
</copy>

这会将 / build / dir / mySourceDir_ *的包含的内容复制到“ some / runtime / directory / myTargetDir”。 “ cutdirsmapper”通过删除动态目录名称“ mySourceDir_ *”来达到目的。

(已通过Ant 1.10.9测试。)