我有一个目录树需要按如下方式处理:
理想情况下,我想:
麻烦的是我对ANT很陌生,而且我很难找到自己的方式。我在基于正则表达式搜索的每个目录操作的文档中找不到任何任务。我发现的最接近的是正则表达式替换任务(< replaceregexp> ),可以跨文件搜索和替换模式。
这甚至可能吗?我真的很感激开始使用的样本。我为请求代码道歉 - 我根本不知道如何开始组合任务来实现这一目标。
或者,我可以选择对每个目录的所有复制操作进行硬编码,但这意味着在项目增长时手动保持所有内容同步。理想情况下,我想根据我描述的正则表达式搜索/复制方法自动化它。
谢谢!
答案 0 :(得分: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>
备注:强>
答案 1 :(得分: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并略微适应
意味着选择扩展名为.txt的所有文件,除了rootdir / of / your / directorytree以外的任何一个与正则表达式匹配的文件(有一个4,5或6后跟一个句点和一个0到9之间的数字)并将它们复制到你的/ target / DIR。
只需根据您的需求进行调整。