如何使用Ant在不知道完整路径的情况下重命名目录?

10

如果有一个未知目录的zip文件,我该如何将该目录重命名或移动到规范化的路径?

<!-- 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

2个回答

15
这只能在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>

天啊,mamboking,这个可行。我完全不知道逻辑流程应该是什么...我们用dirset创建一个路径,然后将其存储在一个正确的位置,以便我们可以在move中访问它的字符串值?干得好。 - mixonic
糟糕,当然这在宏中不起作用,因为它使用属性。@#$@(蚂蚁) - mixonic
3
我知道已经过去了两年,这肯定有效,但我很想知道为什么这有效以及为什么没有更直观的方法来将目录从“fixed-prefix-*”重命名为“someConstantName”。 - radai

3
如果在package-3d28djh3目录(或者你解压后的目录名)中没有子目录,你可以使用以下方法:
<move todir="package" flatten="true" />
  <fileset dir=".">
    <include name="package-*/*"/>
  </fileset>
</move>

否则,对于移动任务,请使用正则表达式映射器,并且删除package-xxx目录。
<move todir="package">
  <fileset dir=".">
    <include name="package-*/*"/>
  </fileset>
  <mapper type="regexp" from="^package-.*/(.*)" to="\1"/>
</move>

你好,pitpod!该正则表达式几乎可以了。但它不是递归的,只有目录被复制而不是它们的内容。我需要移动一个大概有6层深度的目录树。显然,ant的“move”并不简单地映射到mv命令。唉。 - mixonic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接