在重命名原始文件时,Ant将文件复制到dir

时间:2012-12-13 10:38:17

标签: ant copy backup

我有一项需要将​​文件复制到某个位置的任务。如果文件已存在于目标中,则需要重命名这些目标文件(附加.bak)。如果目标文件不存在,则应该只放置文件。

目前我有这个:

<target name="install-jsps">
    <copy todir="target">
        <fileset dir="source"/>
        <globmapper from="*.jsp" to="*.jsp.bak"/>
    </copy>
</target>

然而,这会重命名文件,而我想在复制源文件之前重命名目标文件。我无法重命名整个目标文件夹,因为某些目标文件不在源文件集中。

最好我不想使用像ant-contrib这样的外部库。

1 个答案:

答案 0 :(得分:5)

您可以在两个复制任务中执行此操作:一个用于进行备份,另一个用于从源中复制新文件。您需要的额外位是用于进行备份的文件集中的present selector。选择器允许您仅备份即将被取代的文件,即源目录中存在的文件。

<copy todir="dest">
    <fileset dir="dest" includes="*.jsp">
        <present targetdir="source" />
    </fileset>
    <globmapper from="*" to="*.bak" />
</copy>

<copy todir="dest">
    <fileset dir="source" includes="*.jsp" />
</copy>