使用ant,在不知道完整路径的情况下重命名目录?
Posted
技术标签:
【中文标题】使用ant,在不知道完整路径的情况下重命名目录?【英文标题】:Using ant, rename a directory without knowing the full path? 【发布时间】:2011-02-04 22:25:53 【问题描述】:给定一个包含未知目录的 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>
我不是蚂蚁用户,任何见解都会有所帮助。
非常感谢,-马特
【问题讨论】:
【参考方案1】:这只有在 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>
【讨论】:
天哪,这行得通。我不知道应该有什么逻辑流程...我们用 dirset 创建一个路径,然后将它正确地存储起来,以便我们可以在 move 中访问它的字符串值?好样的。 Drat,当然这在宏中不起作用,因为它使用属性。 @#$@(蚂蚁。 我知道它已经 2 年了,这绝对有效,但我很想知道为什么它有效,以及为什么没有更直观的方法来简单地从“fixed-prefix-*”重命名目录到“someConstantName”【参考方案2】:如果 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>
【讨论】:
你好!该死的正则表达式几乎就是它。它不是递归的,只复制目录而不是它们的内容。我有一个目录树可能有 6 层要移动。显然,ant 的“move”并不是简单的映射到 mv 上。地狱。以上是关于使用ant,在不知道完整路径的情况下重命名目录?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不破坏 Subversion 历史的情况下重命名 Java 包?