重定位动态文件夹的内容

时间:2011-05-31 13:53:48

标签: ant rename move

我有一个zip文件,里面有一个基本文件夹,里面有其他内容。在解压缩之前,我并不总是知道要调用哪个基本文件夹。

我想移动那个基础文件夹,并在蚂蚁中同时重命名它 - 但似乎无法找出方法。我已经编写了代码来将zip文件的内容提取到${local.sdk.dir}/temp/但是从这里我无法弄清楚如何重命名/移动提取的文件夹

<move todir="${local.sdk.dir}/${remote.sdk.file.name}">
  <fileset dir="${local.sdk.dir}/temp/<WHAT_DO_I_PUT_HERE?>"></fileset>
</move>

也尝试了

<move todir="${local.sdk.dir}/${remote.sdk.file.name}" includeEmptyDirs="yes" verbose="true">
  <fileset dir="${local.sdk.dir}/temp/" >
     <include name="**/*" />
  </fileset>
</move>

并且玩了这个,但最接近的我可以得到没有蚂蚁抛出错误是复制临时目录的内容,而不是temp中的基本文件夹。

2 个答案:

答案 0 :(得分:2)

您可以一步完成所有这些操作 - 从zip文件复制并在复制时重命名更改目录名称的文件。 copy task接受嵌套resource collection,因此您可以使用zipfileset指定要直接从zip文件中复制的文件。

为了在复制文件时重命名文件,您可以使用mapper copy任务也作为嵌套元素。在这种情况下,cutsdirmapper看起来像是工作的工具。

所以,如果我已经理解了你想要做的事情,那么这样的事情应该有效:

<copy todir="${local.sdk.dir}/${remote.sdk.file.name}">
  <zipfileset src="${your.zip.file}" />
  <cutdirsmapper dirs="1" />
</copy>

cutdirsmapper仅在Ant 1.8.2之后可用,因此如果您使用的是早期版本,则可以尝试使用regexpmapper

<regexpmapper from="[^/]*(.*)" to="\1" />

答案 1 :(得分:0)

this question类似

  <target name="relocate_sdk_folder">     
    <path id="sdk_folder_name">
      <dirset dir="${local.sdk.dir}/temp/">
        <include name="*"/>
      </dirset>
    </path>
    <property name="sdk_folder_name" refid="sdk_folder_name" />
    <echo message="renaming ${sdk_folder_name} to ${remote.sdk.file.name}" />
    <move file="${sdk_folder_name}" tofile="${local.sdk.dir}/${remote.sdk.file.name}" />         
</target>