2

如何用 Ant 重命名多个文件和文件夹?对于我知道我可以这样做的文件;问题

如何对文件夹做同样的事情?

例如文件夹集(输入)

com.google.appengine.eclipse.sdkbundle_1.5.2.r37v201107211953
com.google.gdt.eclipse.designer.doc.user_2.3.2.r37x201107161328
com.google.gdt.eclipse.designer.hosted.2_0.webkit_win32_2.3.2.r37x201107161253
org.eclipse.acceleo.common_3.1.0.v20110607-0602.jar

输出:

com.google.appengine.eclipse.sdkbundle_1.5.2
com.google.gdt.eclipse.designer.doc.user_2.3.2
com.google.gdt.eclipse.designer.hosted.2_0.webkit_win32_2.3.2
org.eclipse.acceleo.common_3.1.0.jar
4

3 回答 3

2

对于复杂的操作,我使用groovy ANT task

以下示例将使用正则表达式重命名您的文件和目录:

<project name="demo" default="rename">

    <target name="bootstrap">
        <mkdir dir="${user.home}/.ant/lib"/>
        <get dest="${user.home}/.ant/lib/groovy-all.jar" src="http://search.maven.org/remotecontent?filepath=org/codehaus/groovy/groovy-all/2.0.6/groovy-all-2.0.6.jar"/>
    </target>

    <target name="rename">
        <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy"/>

        <fileset id="filesToBeRenamed" dir="build"/>
        <dirset  id="dirsToBeRenamed" dir="build"/>

        <groovy>
            project.references.filesToBeRenamed.each { 
                String origName = it
                String newName = origName.replaceAll(/_[0-9\.]+[a-z0-9\-]+/, "")

                if (origName != newName) {
                    ant.move(file:origName, tofile:newName, verbose:"true")
                }
            }

            project.references.dirsToBeRenamed.each { 
                String origName = it
                String newName = origName.replaceAll(/_[0-9\.]+[a-z0-9\-]+/, "")

                if (origName != newName) {
                    ant.move(file:origName, tofile:newName, verbose:"true")
                }
            }
        </groovy>
    </target>
</project>

笔记:

  • “引导”目标只需要运行一次。它将从 Maven 中心下载 groovy jar
于 2012-12-21T22:50:27.160 回答
0

看看Ant-Contrib 任务。一是<for>任务。这将允许您指定多个目录、目录模式等。这样,您可以遍历目录和文件。

您可以将文件和目录复制到另一个位置并使用Mapper映射文件名。(<move>任务也适用于映射器。)

我建议您将Ant-Contrib Jar 文件${basedir}/antlib/ac下载到您项目的目录中。然后在构建文件的开头执行此操作:

 <taskdef resource="net/sf/antcontrib/antlib.xml">
    <classpath>
        <fileset dir="${basedir}/antilb/ac"/>
    </classdef>
  <taskdef>

这将定义 ant-contrib 任务并允许您使用它们。如果您使用版本控制系统并签入所有内容,那么有人可以签出您的项目并进行构建,而无需先安装 Ant-Contrib。

于 2012-12-21T20:01:18.053 回答
0

这将移动目录及其所有子目录和文件。

  <move todir="${toDir}">
     <fileset dir="${fromDir}"/>
  </move>
于 2012-12-21T13:42:33.737 回答