我需要使用Ant脚本复制除该文件夹中目录之外的文件夹中的所有文件。
我使用下面的脚本来做到这一点。
<copy todir="targetsir">
<fileset dir="srcdir">
<include name="**/*.*"/>
</fileset>
</copy>
但它会复制该文件夹中的所有文件和目录。
如何限制/过滤该文件夹中的目录?
感谢,
答案 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。