我有一个zip文件,里面有一个基本文件夹,里面有其他内容。我并不总是知道基础文件夹将被称为什么,直到我解压缩它
我想在ant中移动这个基本文件夹,同时重命名它,但似乎不知道怎么做。我已经编写了将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>
并对此进行了讨论,但在没有蚂蚁抛出错误的情况下,我最接近的方法是复制临时目录的内容,而不是临时内的基本文件夹。
您可以在一个步骤中完成所有这些操作-从zip文件复制并重命名文件,在复制时更改目录名。copy
任务接受嵌套的资源集合,因此可以使用zipfileset
指定要直接从zip文件复制的文件。
为了在复制文件时重命名文件,可以使用映射器,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" />
类似于这个问题
<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>