2009-11-06 74 views
87

我已經使用copydir來複制目錄樹,但不推薦使用。我的目錄包含一些子目錄,其中一些包含文件,其他包含更多的子目錄。如何使用Ant複製目錄

如何複製整個樹?

+5

聽起來像你想做一個遞歸的副本。這就是Omnipresent提供的解決方案。如果在問題中出現「遞歸」這個詞,更多的人可能會發現這個問題。 – Jason 2012-04-26 18:28:08

回答

101
<copy todir="${dest.dir}" > 
    <fileset dir="${src.dir}" includes="**"/> 
</copy> 

相信會做你想要什麼......(遞歸複製完成)

+2

顯然,當你想要所有東西時,'includes'不是必需的(請參閱用戶* s1n *的回答) – Abel 2010-08-17 07:13:17

+30

這複製{src.dir}的內容,但不包含實際目錄 – cmcginty 2013-01-26 00:42:17

+0

複製件不是一個,而是它的內容。 – 2013-05-30 19:15:17

23

您應該只有指定的目錄(SAN的包括屬性):

<copy todir="../new/dir"> 
    <fileset dir="src_dir"/> 
</copy> 

manual以獲取更多詳細信息和示例。

+12

@ s1n該命令僅將src_dir的所有內容複製到../new/dir而不是src_dir。我們如何將src_dir(目錄)複製到另一個位置? – 2011-12-03 19:24:53

1

從示例here可以使用複製任務編寫一個簡單的Ant文件。

<project name="MyProject" default="copy" basedir="."> 
    <target name="copy"> 
     <copy todir="./new/dir"> <fileset dir="src_dir"/> </copy> 
    </target> 
</project>

src_dir(不含吧)new/dir這應該複製一切。

+6

這只是複製目錄的內容。不包括直接的內容。 。:( – ghostCoder 2011-11-21 07:55:08

87

複製包含目錄本身的內容。

<copy todir="${dest.dir}" > 
    <fileset dir="${src.dir.parent}"> 
     <include name="${src.dir}/**"/> 
    </fileset> 
</copy> 
+10

這應該是正確的答案對方回答是這個問題:「你怎麼拷貝一個目錄的使用Ant的內容」有細微的差別 – cmcginty 2013-01-26 00:41:12

+0

「這應該是正確答案」:。當然,雖然當你無法使用預期的路徑名加載你的資源時,差異並不那麼微妙。 – 2013-07-10 18:48:15

+1

它不適用於ant 1.8,它似乎什麼也沒有發生。 – CCC 2016-01-19 09:27:24

1

一個很好的觀點:如果源文件比目標文件更新,ant將只複製子目錄。 [1]在我的情況下,sub-dirs沒有被複制(我使用verbose =「true」),因爲沒有變化,它們已經在目的地。您可以使用「覆蓋」來強制它,或者觸摸源代碼子目錄中的一些文件。

10

複製包含目錄本身的內容。

<copy todir="${dest.dir}" > 
    <fileset dir="${src.dir.parent}" includes="${src.dir}/**"/> 
</copy> 
+1

這是最簡潔的選項也http://ant.apache.org/manual/Types/fileset.html – Jess 2014-04-09 03:29:38

0

此代碼應複製文件夾以及其內容。它還使用基本名稱任務來避免必須執行任何手動路徑分析。

<project name="Build" default="doCopy"> 
    <property name="source.dir" value="SourceDirPathGoesHere"/> 
    <property name="dest.dir" value="DestinationDirPathGoesHere"/> 
    <target name="doCopy"> 
    <basename property="source.dir.base.name" file="${source.dir}"/> 
    <copy todir="${dest.dir}"> 
     <fileset dir="${source.dir}/.." includes="${source.dir.base.name}/**"/> 
    </copy> 
    </target> 
</project> 
0

我用下面的代碼

<copy todir="${root.dir}/dist/src"> 
       <fileset dir="${root.dir}/build/src" includes="**"/> 
      </copy> 

這將從DIST建立複製src文件夾最終被複制。

希望這可以幫助別人。

1

我添加了一個更通用的模式來複制所有子文件夾。

<copy todir="${dest.dir}" > 
    <fileset dir="${src.dir}" includes="**/*"/> 
</copy> 

查看Patterns瞭解詳情。

1

我使用了include標籤,如下面的代碼片段所示,在我的build.xml文件中複製個別jar文件到目錄中。

<target name="devInstall" depends="generateXsl" description="testing"> 
<copy flatten="true" todir="${test}/WEB-INF/lib" overwrite="${overwrite}"> 
       <fileset refid="buildJars"/> 
       <fileset dir="lib"> 
        <include name="commons-collections-*.jar"/> 
        <include name="commons-io-*.jar"/>    
        <include name="kodo/*.jar"/> 
        <include name="mail*.jar"/>  
        <include name="activation*.jar"/>    
        <include name="guava*.jar"/> 
        <include name="jna*.jar"/>       
       </fileset>   
      </copy> 
</target> 
1

另一個螞蟻的任務是Copydir。這裏的關鍵部分是包含要在dest目錄之後複製的目錄的名稱。子目錄和文件將被自動複製。

<target name="-post-jar"> 
    <copydir src="config" dest="${dist.dir}/config/"/> 
</target> 
+0

看到你的鏈接:。**此任務已被棄用。使用複印任務,而不是**。 – Jim 2017-10-25 19:38:06