2

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

<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 命令。

4

3 回答 3

1

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

<copy todir="./some/runtime/directory/mydir">
    <fileset dir="some/build/dir">
        <include name="**/mydir*/**/*" /> <!-- or just mydir/**/* -->
    </fileset>
</copy>
于 2013-03-29T22:04:31.673 回答
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>
于 2015-01-27T09:17:51.360 回答
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 测试。)

于 2020-11-27T09:55:20.230 回答