【发布时间】:2010-12-13 17:09:22
【问题描述】:
我已使用copydir 复制目录树,但已弃用。我的目录包含一些子目录,其中一些包含文件,而另一些包含更多子目录。
如何复制整棵树?
【问题讨论】:
-
听起来你想做一个递归复制。这就是 Omnipresent 提供的解决方案。如果问题中出现“recursive”这个词,可能会有更多人发现这个问题。
我已使用copydir 复制目录树,但已弃用。我的目录包含一些子目录,其中一些包含文件,而另一些包含更多子目录。
如何复制整棵树?
【问题讨论】:
<copy todir="${dest.dir}" >
<fileset dir="${src.dir}" includes="**"/>
</copy>
相信它会做你想做的......(递归复制完成)
【讨论】:
includes 不是必需的(请参阅用户 s1n 的回答)
您应该只需要指定目录(没有包含属性):
<copy todir="../new/dir">
<fileset dir="src_dir"/>
</copy>
有关更多详细信息和示例,请参阅manual。
【讨论】:
从例子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。
【讨论】:
复制内容,包括目录本身。
<copy todir="${dest.dir}" >
<fileset dir="${src.dir.parent}">
<include name="${src.dir}/**"/>
</fileset>
</copy>
注意:${src.dir} 是相对于 ${src.dir.parent} 的,而不是完整路径
【讨论】:
x.parent 不应该是x 的parent... -_-
一个很好的点:如果源文件比目标文件新,ant 只会复制子目录。 [1] 在我的情况下,子目录没有被复制(我使用的是 verbose="true"),因为没有任何更改并且它们已经在目标中。您可以使用“覆盖”来强制它,或触摸源子目录中的一些文件。
【讨论】:
复制内容,包括目录本身。
<copy todir="${dest.dir}" >
<fileset dir="${src.dir.parent}" includes="${src.dir}/**"/>
</copy>
【讨论】:
此代码应复制文件夹及其内容。它还使用 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>
【讨论】:
我终于用下面的代码复制了
<copy todir="${root.dir}/dist/src">
<fileset dir="${root.dir}/build/src" includes="**"/>
</copy>
这会将 src 文件夹从 dist 复制到 build。
希望这对某人有所帮助。
【讨论】:
我正在添加一个更通用的模式来复制所有子文件夹。
<copy todir="${dest.dir}" >
<fileset dir="${src.dir}" includes="**/*"/>
</copy>
详情请见Patterns。
【讨论】:
我在 build.xml 文件中使用了如下代码 sn-p 所示的包含标签来复制目录中的各个 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>
【讨论】:
另一个蚂蚁任务是Copydir。这里的关键部分是在 dest 目录之后包含要复制的目录的名称。子目录和文件会自动复制。
<target name="-post-jar">
<copydir src="config" dest="${dist.dir}/config/"/>
</target>
【讨论】: