如何使用Ant重命名文件和文件夹

时间:2012-12-21 13:02:34

标签: ant

如何使用Ant重命名许多文件和文件夹?对于文件,我知道我可以这样做; question

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

例如 文件夹集(输入)

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

3 个答案:

答案 0 :(得分: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>

注意:

  • “bootstrap”目标只需要运行一次。它将从Maven central
  • 下载groovy jar

答案 1 :(得分:0)

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

  <move todir="${toDir}">
     <fileset dir="${fromDir}"/>
  </move>

答案 2 :(得分:0)

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

您可以将文件和目录复制到其他位置,然后使用Mapper映射文件名。 (<move>任务也适用于地图制作者。)

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

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

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