如何使用Ant复制目录

时间:2009-11-06 04:35:41

标签: java ant

我已使用copydir复制目录树,但已弃用。我的目录包含一些子目录,其中一些包含文件,另一些包含更多子目录。

如何复制整棵树?

11 个答案:

答案 0 :(得分:109)

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

相信会做你想要的......(递归复制)

答案 1 :(得分:106)

复制包含目录本身的内容。

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

答案 2 :(得分:25)

您只需要指定目录(没有包含属性):

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

有关详细信息和示例,请参阅manual

答案 3 :(得分:14)

复制包含目录本身的内容。

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

答案 4 :(得分:2)

我在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>

答案 5 :(得分: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 :(得分:1)

一个好点:如果源文件比目标文件新,ant只会复制子目录。 [1]在我的情况下,子目录没有被复制(我使用的是verbose =“true”),因为没有变化而且它们已经在目的地。您可以使用“覆盖”强制它,或触摸源子目录中的某些文件。

答案 7 :(得分:1)

我正在添加一个更通用的模式来复制所有子文件夹。

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

有关详细信息,请参阅Patterns

答案 8 :(得分:1)

另一个蚂蚁任务是Copydir。这里的关键部分是在dest目录之后包含要复制的目录的名称。子目录和文件将自动复制。

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

答案 9 :(得分:0)

此代码应复制文件夹及其内容。它还使用basename任务来避免必须进行任何手动路径解析。

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

答案 10 :(得分:0)

我最后使用以下代码复制

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

这会将src文件夹从dist复制到build。

希望这有助于某人。