我认为你需要做的就是把它分解成几个步骤:
- 使用 FTP 列出相关文件
- 从列表中提取文件名
- 对文件名进行排序
- 从排序列表中取第一个或最后一个文件名
- 使用 FTP 获取该文件
由于您的文件是使用yyyyMMdd.<version> 模式命名的,因此您可以简单地按名称对文件进行排序,以将它们按日期顺序排列。
第 1 步:列出类似这样的文件
<ftp action="list"
server="${server}" userid="${user}"
password="${password}" listing="list.txt">
<fileset>
<include name="Evolvenet_*"/>
</fileset>
</ftp>
步骤 2-4:从列表中提取最新文件
<loadresource property="newest.file">
<concat>
<fileset file="list.txt"/>
</concat>
<filterchain>
<tokenfilter>
<replaceregex pattern=".*(Evolvenet_.*)" replace="\1"/>
</tokenfilter>
<sortfilter reverse="true"/>
<headfilter lines="1"/>
</filterchain>
</loadresource>
<echo message="newest.file ${newest.file}"/>
第 5 步:使用 FTP 获取该文件
<ftp action="get"
server="${server}" userid="${user}"
password="${password}">
<fileset dir="download">
<include name="${newest.file}"/>
</fileset>
</ftp>
我的回答好像 Evolvenet_* 是文件,但我注意到您说它们是目录。我认为下载目录需要更改的只是 FTP get 中的 include 子句:
<include name="${newest.file}/**"/>
要列出某个目录(而不是用户的登录目录)的内容,使用文件集的dir属性来指定远程目录,例如
<fileset dir="/build/Evolvenet 2010">
<include name="*"/>
</fileset>