2009-10-14 89 views
12

我需要使用Ant脚本复制文件夹中除目录之外的所有文件。Ant - 仅复制文件不是目录

我使用下面的脚本来做到这一点。

<copy todir="targetsir"> 
    <fileset dir="srcdir"> 
    <include name="**/*.*"/> 
    </fileset> 
</copy> 

但它复制该文件夹中的所有文件和目录。

如何限制/过滤该文件夹中的目录?

感谢,

回答

10

你的意思是srcdir conatins子目录,你不想复制它们,你只是想在一个文件级复制srcdir之下?

<copy todir="targetsir"> 
    <fileset dir="srcdir"> 
    <include name="*"/> 
    <type type="file"/> 
    </fileset> 
</copy> 

这应该工作。你问题中的“**/*.*”是指“每个子目录下的每个文件”。只需使用“*”就可以匹配srcdir下的文件,而不是子目录。

编辑排除创建空子目录。

+0

的*自行创建空的子目录。我不会认为这是预期的行为。我会认为@Pavel的解决方案是正确的。 – Gatica 2014-09-18 12:50:10

1

你可以尝试

<copy todir="targetsir"> 
    <fileset dir="srcdir"> 
    <include name="*.*"/> 
    </fileset> 
</copy> 

**用于匹配的目录结构。

-1

秘诀是不使用文件集,而是使用dirset。

+6

我怀疑是否更明确地表明你的意思是有益的 – 2010-12-22 14:59:36

1
<copy todir="targetsir" includeEmptyDirs="false"> 
    <fileset dir="srcdir"> 
    <include name="*"/> 
    </fileset> 
</copy> 
7

我没有足够的声望发表评论,所以我在这里写新帖。包括name="*"name="*.*"的两种解决方案通常都能正常工作,但它们都不符合您的预期。

第一个会创建源目录中存在的空目录,因为*也与目录名称匹配。 *.*的工作原理主要是因为文件的扩展名和目录不是这样的约定,但如果你命名目录my.dir,这个通配符也会创建一个带有这个名字的空目录。

为了做正确,那<fileset />接受,你可以利用<type />选择:

<copy todir="targetsir"> 
    <fileset dir="srcdir"> 
    <include name="*"/> 
    <type type="file"/> 
    </fileset> 
</copy> 
22

我觉得还有一个更简单的方法。

flatten="true" - 忽略源目录的目录结构,将所有文件复制到由todir属性指定的单个目录中。默认值是false

0

如果你的文件夹下有很多子目录,你不希望他们被复制(如果你只想文件)试试这个..

<target name="copy"> 
<copy todir="out" flatten="true"> 
<fileset dir="tn"> 
<filename name="**/cit.txt" /> 
</fileset> 
</copy> 
</target> 
+0

默认情况下,flatten设置为“false” – 2017-07-06 09:15:48