2010-04-06 83 views
9

给定一个带有未知目录的zip文件,如何重命名或将该目录移动到规范化路径?使用ant,在不知道完整路径的情况下重命名目录?

<!-- Going to fetch some stuff --> 
<target name="get.remote"> 

    <!-- Get the zipfile --> 
    <get src="http://myhost.com/package.zip" 
     dest="package.zip"/> 

    <!-- Unzip the file --> 
    <unzip src="package.zip" 
      dest="./"/> 

    <!-- Now there is a package-3d28djh3 directory. The part after package- is 
     a hash and cannot be known ahead of time --> 

    <!-- Remove the zipfile --> 
    <delete file="package.zip"/> 

    <!-- Now we need to rename "package-3d28djh3" to "package". My best attempt 
     is below, but it just moves package-3d28djh3 into package instead of 
     renaming the directory. --> 

    <!-- Make a new home for the contents. --> 
    <mkdir dir="package" /> 

    <!-- Move the contents --> 
    <move todir="package/"> 
     <fileset dir="."> 
     <include name="package-*/*"/> 
     </fileset> 
    </move> 

</target> 

我不是一个蚂蚁用户,任何洞察力都会有所帮助。

谢谢了,-Matt

回答

12

这只会只要dirset只返回1项工作。

<project name="Test rename" basedir="."> 

    <target name="rename"> 
    <path id="package_name"> 
     <dirset dir="."> 
     <include name="package-*"/> 
     </dirset> 
    </path> 
    <property name="pkg-name" refid="package_name" /> 
    <echo message="renaming ${pkg-name} to package" /> 
    <move file="${pkg-name}" tofile="package" /> 
    </target> 

</project> 
+0

捣乱工作的捣蛋。我有*不知道*逻辑流程应该在那里......我们用dirset创建一个路径,然后将它存储在正确的位置,以便我们可以在移动时访问它的字符串值。尼斯布莱恩'。 – mixonic 2010-04-06 19:34:14

+0

Drat,当然这不适用于宏,因为它使用属性。 @#$ @(ant。 – mixonic 2010-04-07 12:53:13

+3

我知道它已经2年了,而且这绝对有效,但我很想知道为什么这会起作用,为什么没有更直观的方法来简单地重命名“fixed-prefix- *”目录到“someConstantName” – radai 2012-09-08 15:01:10

2

如果在包3d28djh3目录中没有子目录(或任何一旦你提取它的叫法),可以使用

<move todir="package" flatten="true" /> 
    <fileset dir="."> 
    <include name="package-*/*"/> 
    </fileset> 
</move> 

否则,使用正则表达式映射器,用于移动任务摆脱包xxx目录:

<move todir="package"> 
    <fileset dir="."> 
    <include name="package-*/*"/> 
    </fileset> 
    <mapper type="regexp" from="^package-.*/(.*)" to="\1"/> 
</move> 
+0

Howdy pitpod!该死的正则表达式几乎就是它,但它不是递归的,只有目录被复制而不是它们的内容我有一个目录树,可能有6层深度的移动,很明显,蚂蚁的“移动”不是简单地映射到mv。Hell。 – mixonic 2010-04-06 19:28:19

相关问题