在Ant中如何重命名一个动态命名的目录?

3

有很多回答可以告诉你如何重命名目录,但它们都需要知道确切的目录名称。在我的情况下,名称是动态生成的。我想做像这样的事情,但这会失败,因为我不能使用通配符来匹配源目录:

<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。我正在尝试寻找等效的ant命令。
3个回答

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>

1
如果只需要复制目录内容,那么只需清空您的构建文件夹,您可以尝试以下操作:
<copy todir="./some/runtime/directory/mydir">
    <fileset dir="some/build/dir">
        <include name="**/mydir*/**/*" /> <!-- or just mydir/**/* -->
    </fileset>
</copy>

我尝试过这样做,但它是复制整个目录,所以我得到了 /some/runtime/directory/mydir/mydir_<timestamp>。 - undefined

0

我遇到了同样的问题。在没有找到满意的答案之后,因为总是会复制动态目录名称,我找到了这个解决方案:

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

这将把 "some/build/dir/mySourceDir_*" 的包含内容复制到 "some/runtime/directory/myTargetDir"。通过使用 "cutdirsmapper",可以去除动态目录名 "mySourceDir_*"。

(已在Ant 1.10.9版本中测试过。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接