我需要使用ant将文件从一个文件夹复制到另一个文件夹。 我知道src文件的确切名称但是对于目标文件它是未知的,因为它是基于版本的文件夹我使用了以下脚本但它不起作用(请注意todir属性中的*:
<copy todir="${env.WORKSPACE}/my_dist_folder*" >
<fileset dir="${env.WORKSPACE}/my_src_folder">
<exclude name="**/*.svn"/>
</fileset>
</copy>
请建议! 感谢
答案 0 :(得分:1)
假设可能有多个my_dist_folder-xx..
个文件夹:
<!-- goups all directories of the form "my_dist_folder-xx" -->
<dirset id="dir_list" dir="${env.WORKSPACE}">
<include name="my_dist_folder*"/>
</dirset>
<!-- generate path names of the above dirs and sort them -->
<pathconvert property="dir_names_list" refid="dir_list" pathsep=","/>
<sortlist property="sorted_names_list" value="${dir_names_list}" delimiter="," />
<!-- pick the last path-name (as it corresponds with the latest version-number directory ) -->
<propertyregex property="dist_folder" input="${sorted_names_list}" regexp=",?([^,]+)$" select="\1"/>
<!-- use this "dist_folder" as "todir" in the copy task -->
<copy todir="${dist_folder}" >
<fileset dir="${env.WORKSPACE}/my_src_folder">
<exclude name="**/*.svn"/>
</fileset>
</copy>
尽管如此,根据您的问题,似乎所有此类my_dist_folder-xx..
文件夹都将直接位于基础${env.WORKSPACE}
下...如果它们可能位于基础内的子目录下,则替换<include name="my_dist_folder*"/>
任务中<include name="**/my_dist_folder*"/>
行<dirset>
。
更新:另外,如果您确定系统上始终只有一个此类文件夹my_dist_folder-xx..
,那么您可以删除以下两行 - <sortlist>
和<propertyregexp>
,因为<dirset>
只生成一个路径名,因此您无需排序/选择 - -最后一个。因此,您可以使用<pathconvert>
属性直接设置目标文件夹。例如:
<dirset id="dir_list" dir="${env.WORKSPACE}">
<include name="my_dist_folder*"/>
</dirset>
<!-- generate path name of the above dir -->
<pathconvert property="dir_names_list" refid="dir_list" pathsep=","/>
<!-- use this "dir_names_list" as "todir" in the copy task -->
<copy todir="${dir_names_list}" >
<fileset dir="${env.WORKSPACE}/my_src_folder">
<exclude name="**/*.svn"/>
</fileset>
</copy>