2012-02-13 46 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

相关问题