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

如何使用Ant重命名文件和文件夹,ant,Ant,如何使用Ant重命名许多文件和文件夹?对于我知道的文件,我可以这样做 如何对文件夹执行相同的操作 例如。 文件夹集(输入) 输出: 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

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

如何对文件夹执行相同的操作

例如。 文件夹集(输入)

输出:

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

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

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

看一看。一个是
任务。这将允许您指定多个目录、目录模式等。通过这种方式,您可以循环浏览目录和文件

  <move todir="${toDir}">
     <fileset dir="${fromDir}"/>
  </move>
您可以将文件和目录复制到其他位置,并使用映射文件名。(
任务也将与映射器一起工作。)

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

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


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

对于复杂的操作,我使用

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

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

project.references.filestobernamed.each{
字符串origName=it
字符串newName=origName.replaceAll(/u[0-9\.]+[a-z0-9\-]+/,“”)
if(origName!=newName){
move(文件:origName,tofile:newName,详细:“true”)
}
}
project.references.dirsToBeRenamed.each{
字符串origName=it
字符串newName=origName.replaceAll(/u[0-9\.]+[a-z0-9\-]+/,“”)
if(origName!=newName){
move(文件:origName,tofile:newName,详细:“true”)
}
}
注:

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

当你说多个文件夹时,是指一个简单的文件夹列表吗?另外,您需要应用哪种类型的重命名“规则”?最好将脚本放在
macrodef
中,以便目标看起来干净,具有个人想法。@coolcfan无参数。对于我自己的构建,我更进一步,将我的macrodef打包在antlibs中,并使用ivy下载。这种方法使我能够控制ANT扩展的版本。见: