我想在目录中找到文件的路径(类似于unix的'find'命令或'which'命令,但我需要它工作于独立于平台的)并将其保存为属性。Ant:在一个目录中查找文件的路径
试图使用whichresource
ant任务,但它没有办法(我认为这只适用于查看jar文件)。
我宁愿如果它是纯粹的蚂蚁,而不是写我自己的任务或使用第三方扩展。
请注意,在路径中可能有多个按该名称命名的文件实例 - 我希望它只返回第一个实例(或者至少我想只能选择一个)。
有什么建议吗?
我想在目录中找到文件的路径(类似于unix的'find'命令或'which'命令,但我需要它工作于独立于平台的)并将其保存为属性。Ant:在一个目录中查找文件的路径
试图使用whichresource
ant任务,但它没有办法(我认为这只适用于查看jar文件)。
我宁愿如果它是纯粹的蚂蚁,而不是写我自己的任务或使用第三方扩展。
请注意,在路径中可能有多个按该名称命名的文件实例 - 我希望它只返回第一个实例(或者至少我想只能选择一个)。
有什么建议吗?
一种可能性是使用first
资源选择器。例如,要查找一个名为a.jar
文件目录下jars
地方:
<first id="first">
<fileset dir="jars" includes="**/a.jar" />
</first>
<echo message="${toString:first}" />
如果没有匹配的文件,什么都不会回应,否则你会得到的路径,第一场比赛。
以下是选择第一个匹配文件的示例。逻辑如下:
该功能被封装在一个macrodef的可重用性。
<project default="test">
<target name="test">
<find dir="test" name="*" property="match.1"/>
<echo message="found: ${match.1}"/>
<find dir="test" name="*.html" property="match.2"/>
<echo message="found: ${match.2}"/>
</target>
<macrodef name="find">
<attribute name="dir"/>
<attribute name="name"/>
<attribute name="property"/>
<sequential>
<pathconvert property="@{property}.matches" pathsep="${line.separator}">
<fileset dir="@{dir}">
<include name="@{name}"/>
</fileset>
</pathconvert>
<loadresource property="@{property}">
<string value="${@{property}.matches}"/>
<filterchain>
<headfilter lines="1"/>
</filterchain>
</loadresource>
</sequential>
</macrodef>
</project>
macrodef很酷 - 为此+1 :) – yonix 2011-12-20 16:49:07
+1比我的更整洁:) – sudocode 2011-12-20 15:11:04
太棒了!这很好!你能解释一下'toString:'thingie是什么吗? – yonix 2011-12-20 16:45:47
这只是一种“串化”Ant类型的方法。请参阅http://ant.apache.org/manual/properties.html#toString – 2011-12-20 16:50:33