2012-12-21 48 views
2

如何使用Ant重命名多個文件和文件夾?對於我知道的文件,我可以這樣做; question如何使用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 
+0

當你說多個文件夾時,你是指一個簡單的文件夾列表嗎?另外,你需要申請什麼樣的重新命名「規則」? –

+0

已在說明中添加。 – Anand

回答

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

非常感謝...它的工作! – Anand

+0

最好把腳本放在'macrodef'中,這樣目標看起來很乾淨,個人認爲。 – coolcfan

+0

@coolcfan沒有參數。對於我自己的構建,我更進一步,將我的宏定義文件打包到antlib中,並使用常青藤下載。這種方法使我能夠控制我的ANT擴展。參見:http://stackoverflow.com/questions/15643191/how-to-manage-a-common-ant-build-script-across-multiple-project-build-jobs-on-je/15647898#15647898 –

0

這將移動目錄及其所有子目錄和文件。

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

這將只適用於單個文件夾,我需要重命名多個文件夾... – Anand

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> 

這將定義螞蟻的contrib任務,並允許您使用它們。如果您正在使用版本控制系統並檢查所有內容,則有人可以檢出項目並進行構建,而無需首先安裝Ant-Contrib。