如何从ftp下载最新的文件夹

bha*_*ker 3 ant ftp

嗨,任何人都知道如何从FTP下载最新的文件夹.我有像Evolvenet_20111112.1 Evolvenet_20111113.1这样的文件夹,我必须下载最新的文件夹.任何人都可以帮我一个例子.

在此先感谢Bhasker.


Ftp列表无法正常工作,因为我的构建文件夹位于\ build\Evolvenet 2010 \中.登录到ftp服务器后,列表将采用默认文件夹.有没有办法指定转到该文件夹​​和列表.

谢谢,Bhasker.

sud*_*ode 5

我认为你需要做的是将其分解为几个步骤:

  1. 使用FTP列出相关文件
  2. 从列表中提取文件名
  3. 对文件名进行排序
  4. 从排序列表中获取第一个或最后一个文件名
  5. 使用FTP获取该文件

由于您的文件是使用yyyyMMdd.<version>模式命名的,因此您只需按名称对文件进行排序即可按日期顺序排列.

第1步:列出这样的文件

<ftp action="list" 
     server="${server}" userid="${user}" 
     password="${password}" listing="list.txt">
  <fileset>
    <include name="Evolvenet_*"/>
  </fileset>
</ftp>
Run Code Online (Sandbox Code Playgroud)

步骤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}"/>
Run Code Online (Sandbox Code Playgroud)

第5步:使用FTP获取该文件

<ftp action="get"
     server="${server}" userid="${user}"
     password="${password}">
  <fileset dir="download">
    <include name="${newest.file}"/>
  </fileset>
</ftp>
Run Code Online (Sandbox Code Playgroud)

我已回答好像Evolvenet_*是文件,但我注意到你说它们是目录.我认为所有需要更改以下载目录的是FTP get中的include子句:

<include name="${newest.file}/**"/>
Run Code Online (Sandbox Code Playgroud)

要列出某个目录(而不是用户的登录目录)的内容,请使用dirfileset 的属性指定远程目录,例如

  <fileset dir="/build/Evolvenet 2010">
    <include name="*"/>
  </fileset>
Run Code Online (Sandbox Code Playgroud)