Ant - 仅复制文件而不是目录

时间:2009-10-14 07:26:09

标签: ant

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

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

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

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

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

感谢,

7 个答案:

答案 0 :(得分:23)

我认为有一种更简单的方法。

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

答案 1 :(得分:10)

您的意思是srcdir conatins子目录,并且您不想复制它们,您只想将文件复制到srcdir下面的某个级别?

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

那应该有用。您问题中的“**/*.*”表示“每个子目录下的每个文件”。只使用“*”只匹配srcdir下的文件,而不是子目录。

已编辑以排除创建空子目录。

答案 2 :(得分:7)

我没有足够的声誉发表评论,所以我在这里写新帖子。包含name="*"name="*.*"的两种解决方案一般都可以正常工作,但这些解决方案都不是您所期望的。

第一个创建源目录中存在的空目录,因为*也匹配目录名。 *.*主要是因为文件具有扩展名和目录的约定,但是如果您将目录命名为my.dir,则此通配符将创建一个具有此名称的空目录。

要正确执行此操作,您可以利用<type />接受的<fileset />选择器:

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

答案 3 :(得分:1)

你能试试吗

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

**用于匹配目录结构。

答案 4 :(得分:1)

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

答案 5 :(得分:0)

如果您的文件夹包含许多子目录,并且您不希望复制它们(如果您只想要文件),请尝试此操作。

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

答案 6 :(得分:-1)

秘诀是使用not fileset而不是dirset。