2012-02-13 72 views
1

我有一個目錄樹,我需要處理如下:查找該文件中存在的所有目錄,這樣該文件包含一個搜索字符串

  • 我有一個特定的文件需要被複制到有選擇的幾個子目錄
  • 感興趣的子目錄是一個包含文件中,我可以正則表達式匹配已知搜索字符串

理想情況下,我想:

  • 目錄
  • 如果正則表達式匹配中執行所有文件的正則表達式匹配,將文件複製到該目錄

麻煩的是,我很新的ANT和我有困難找我的方式。基於正則表達式搜索,我無法在文檔中找到有關每個目錄操作的任何任務。我找到的最接近的是一個正則表達式替換任務(<replaceregexp>),它可以搜索和替換跨文件的模式。

這甚至可能嗎?我真的很感激一個樣本開始。我對請求代碼表示歉意 - 我只是不知道如何開始組合這些任務。

或者我可以選擇對每個目錄下的所有複製操作進行硬編碼,但這意味着隨着項目的增長,手動將所有內容都保持同步。理想情況下,我想根據我描述的正則表達式搜索/複製方法自動化它。

謝謝!

回答

1

您的要求有點不標準,所以我用自定義的Groovy task解決了它。

這裏有一個工作示例:

<project name="find-files" default="copy-files"> 

    <!-- 
    ====================== 
    Groovy task dependency 
    ====================== 
    --> 
    <path id="build.path"> 
     <pathelement location="jars/groovy-all-1.8.6.jar"/> 
    </path> 
    <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpathref="build.path"/> 


    <!-- 
    ========================= 
    Search for matching files 
    ========================= 
    --> 
    <target name="search-files"> 
     <fileset id="filesContainingSearchString" dir="src"> 
      <include name="**/*.txt"/> 
      <containsregexp expression="[4-6]\.[0-9]"/> 
     </fileset> 
    </target> 

    <!-- 
    =================================== 
    Copy file into each directory found 
    =================================== 
    --> 
    <target name="copy-files" depends="search-files"> 
     <groovy> 
     project.references.filesContainingSearchString.each { file -> 
      def dir = new File(file.toString()).parent 

      ant.copy(file:"fileToBeCopied.txt", toDir:dir) 
     } 
     </groovy> 
    </target> 

</project> 

注:

+0

謝謝馬克,我已經爲我的目的調整了你的腳本,它運行良好。 – 2012-02-14 00:39:05

0

使用複製任務與文件集和正則表達式選擇:

<copy todir="your/target/dir"> 
    <fileset dir="rootdir/of/your/directorytree" includes="**/*.txt"> 
    <containsregexp expression="[4-6]\.[0-9]"/> 
    </fileset> 
</copy> 

這個例子是taken from the ant manual和稍微適應。
手段選擇與正則表達式匹配的任何超出rootdir/of/your/directorytree的.txt擴展名的所有文件(4,5或6後跟句點和0到9的數字)並將它們複製到您的/目標/目錄。
只是適應您的需求。

+0

這是偉大的下載,但並不完全符合我後。我需要將文件複製到包含匹配正則表達式的文件的每個目錄。 看起來像是一個開始。 – 2012-02-13 09:37:15

相關問題