2012-12-13 50 views
3

我有一項任務需要將文件複製到某個位置。如果這些文件已存在於目標中,則需要重命名這些目標文件(附帶.bak)。如果目標文件不存在,則應該將文件放置到位。當重命名原始文件時Ant將文件複製到目錄

目前我有這樣的:

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

然而,這將重命名文件,同時我希望複製在源文件之前重命名目標文件。我無法重命名整個目標文件夾,因爲某些目標文件不在源文件集中。

最好我不想使用像ant-contrib這樣的外部庫。

回答

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> 
+0

太棒了!不知道「present」標籤。非常感謝。 –

相關問題