我需要使用Ant脚本复制文件夹中除目录之外的所有文件。Ant - 仅复制文件不是目录
我使用下面的脚本来做到这一点。
<copy todir="targetsir">
<fileset dir="srcdir">
<include name="**/*.*"/>
</fileset>
</copy>
但它复制该文件夹中的所有文件和目录。
如何限制/过滤该文件夹中的目录?
感谢,
我需要使用Ant脚本复制文件夹中除目录之外的所有文件。Ant - 仅复制文件不是目录
我使用下面的脚本来做到这一点。
<copy todir="targetsir">
<fileset dir="srcdir">
<include name="**/*.*"/>
</fileset>
</copy>
但它复制该文件夹中的所有文件和目录。
如何限制/过滤该文件夹中的目录?
感谢,
你的意思是srcdir
conatins子目录,你不想复制它们,你只是想在一个文件级复制srcdir
之下?
<copy todir="targetsir">
<fileset dir="srcdir">
<include name="*"/>
<type type="file"/>
</fileset>
</copy>
这应该工作。你问题中的“**/*.*
”是指“每个子目录下的每个文件”。只需使用“*
”就可以匹配srcdir下的文件,而不是子目录。
编辑排除创建空子目录。
你可以尝试
<copy todir="targetsir">
<fileset dir="srcdir">
<include name="*.*"/>
</fileset>
</copy>
**用于匹配的目录结构。
秘诀是不使用文件集,而是使用dirset。
我怀疑是否更明确地表明你的意思是有益的 – 2010-12-22 14:59:36
<copy todir="targetsir" includeEmptyDirs="false">
<fileset dir="srcdir">
<include name="*"/>
</fileset>
</copy>
我没有足够的声望发表评论,所以我在这里写新帖。包括name="*"
或name="*.*"
的两种解决方案通常都能正常工作,但它们都不符合您的预期。
第一个会创建源目录中存在的空目录,因为*
也与目录名称匹配。 *.*
的工作原理主要是因为文件的扩展名和目录不是这样的约定,但如果你命名目录my.dir
,这个通配符也会创建一个带有这个名字的空目录。
为了做正确,那<fileset />
接受,你可以利用<type />
选择:
<copy todir="targetsir">
<fileset dir="srcdir">
<include name="*"/>
<type type="file"/>
</fileset>
</copy>
我觉得还有一个更简单的方法。
flatten="true"
- 忽略源目录的目录结构,将所有文件复制到由todir属性指定的单个目录中。默认值是false
。
如果你的文件夹下有很多子目录,你不希望他们被复制(如果你只想文件)试试这个..
<target name="copy">
<copy todir="out" flatten="true">
<fileset dir="tn">
<filename name="**/cit.txt" />
</fileset>
</copy>
</target>
默认情况下,flatten设置为“false” – 2017-07-06 09:15:48
的*自行创建空的子目录。我不会认为这是预期的行为。我会认为@Pavel的解决方案是正确的。 – Gatica 2014-09-18 12:50:10