使用ant,查找与正则表达式匹配的文件,并搜索文件中是否存在子字符串

Anu*_*kar 2 ant

我有一个包含2个文件的目录:

abc_2010-14-12.log

abcdef.log

我想在第一个文件中搜索子字符串.但我不知道确切的文件名,因为它附加了时间戳.我想我将不得不在文件名中使用正则表达式.

mar*_*ton 7

首先,您必须识别该文件.您可以使用普通fileset包含来做到这一点:

<fileset dir="." id="the.file" includes="abc_????-??-??.log" />
Run Code Online (Sandbox Code Playgroud)

如果这可能会对"abc_XXXX-YY-ZZ.log"之类的内容产生误报,那么您可以使用filename选择器,它具有比包含和排除规则中可用的"glob"通配符更强大的匹配:

<fileset dir="." id="the.file">
    <filename regex=".*_[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9].log"/>
</fileset>
Run Code Online (Sandbox Code Playgroud)

您可以进一步限制,假设(根据您的示例)YYYY-DD-MM:

<filename regex=".*_20[01][0-9]-[0-3][0-9]-[01][0-9].log"/>
Run Code Online (Sandbox Code Playgroud)

这些将为您提供匹配的文件集,希望只是一个文件.

如果您有多个匹配文件存在 - 比如几天的日志文件 - 您需要决定您想要哪一个.您可以tstamp根据当前日期使用任务来精确指定文件名,而不是使用模式匹配或glob.此示例获取具有昨天日期的文件,与您的格式匹配:

<tstamp>
    <format property="file.date" pattern="yyyy-dd-MM"
            offset="-1" unit="day"/>
</tstamp>
<fileset dir="." id="the.file" includes="abc_${file.date}.log" />
Run Code Online (Sandbox Code Playgroud)

确定文件后,resourcecontains如果文件匹配,您可以使用条件设置属性 - 在这种情况下,我们搜索"查找我":

<condition property="file.matches">
    <resourcecontains refid="the.file" substring="look for me" />
</condition>
Run Code Online (Sandbox Code Playgroud)