2010-11-19 61 views
5

我已經使用螞蟻近十年了,但每隔一段時間我都需要做一些超出我平常經歷的事情。這其中缺乏一個明顯的答案(和直觀的方式導致死角)一次性複製多個目錄(和內容)

問題:在目錄「榜樣」新目錄「將myInstance」

複製幾個子目錄(及其內容)。爲了澄清,複製源目錄中的一些子目錄,但不是所有的子目錄。

源目錄:

example/ 
    ignoreThisDirectory/ 
    ignoreThisOneAlso/ 
    lib 
    etc/ 
    webapps/ 

嘗試:窮途末路 這種嘗試在第一次出現工作。它創建了子目錄lib等,webapps。然而,「複製」並未複製其內容;我留下了空的子目錄。

<copy todir="myInstance" > 
    <dirset dir="example" includes="lib etc webapps"/>  
</copy>  

成功,但冗長 最後,我不得不每個目錄逐個複製,冗長和非幹這似乎:

<copy todir="myInstance/etc"> 
    <fileset dir="example/etc"/> 
    </copy>  
    <copy todir="myInstance/lib"> 
    <fileset dir="example/lib" /> 
    </copy>  
    <copy todir="myInstance/webapps"> 
    <fileset dir="example/webapps" /> 
    </copy>  

在此先感謝

回答

8

可以指定文件集中包含多個包含和排除規則。如果您未指定包含規則,則默認情況是包含所有內容,但排除規則至少排除一次的內容除外。

下面是一個包容性的例子:

<property name="src.dir" value="example" /> 
<property name="dest.dir" value="myInstance" /> 

<copy todir="${dest.dir}"> 
    <fileset dir="${src.dir}"> 
     <include name="lib/**" /> 
     <include name="etc/**" /> 
     <include name="webapps/**" /> 
    </fileset> 
</copy> 

注意**通配符,將在完整目錄樹帶來下每三個「前沿」指定的子目錄。另外,如果你想明確排除一些目錄,但複製了所有其他的,你可能會忽略列入(從而得到默認的包容一切的行爲),並提供排除列表:

<copy todir="${dest.dir}"> 
    <fileset dir="${src.dir}"> 
     <exclude name="ignoreThisDir*/" /> 
     <exclude name="ignoreThisOne*/" /> 
    </fileset> 
</copy> 

,你可以進一步將你給出的特定例子歸結爲一個排除模式:

<exclude name="ignore*/" /> 
+0

我會改爲使用includes來列出要複製的內容。 – JasonMArcher 2010-11-21 06:33:03