我有一个包含2个文件的目录:
abc_2010-14-12.log
abcdef.log
我想在第一个文件中搜索子字符串。但我不知道确切的文件名,因为它附加了时间戳。我想我将不得不在文件名中使用正则表达式。
答案 0 :(得分:7)
首先,您必须识别该文件。您可以使用普通fileset
包含:
<fileset dir="." id="the.file" includes="abc_????-??-??.log" />
如果这可能会对'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>
您可以进一步限制,假设(根据您的示例)YYYY-DD-MM:
<filename regex=".*_20[01][0-9]-[0-3][0-9]-[01][0-9].log"/>
这些将为您提供匹配的文件集,希望只是一个文件。
如果您有多个匹配文件存在 - 比如几天的日志文件 - 您需要决定所需的文件。您可以使用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" />
确定文件后,如果文件匹配,您可以使用resourcecontains
条件设置属性 - 在这种情况下,我们会搜索“找我”:
<condition property="file.matches">
<resourcecontains refid="the.file" substring="look for me" />
</condition>