如何检查部分文件名并在ant中删除/替换文件?

时间:2019-04-01 09:35:21

标签: java eclipse ant antbuilder

如何从下载中检查部分文件名并从目标中替换旧文件。
版本是文件名的一部分。如果旧版本文件不存在,则只需将其复制。考虑“下载”中的文件是最新的。

文件夹“下载”具有来自服务器的最新文件。和“目标”文件夹,其中已经有一些文件。

文件名模式:<UNIQUE_NAME>_<VERSION>_<SOME-TYPE>.dat

/ 下载-所有最新信息都在这里

FILE01 _01.02.03_xy-z.dat
FILE02 _02.03.04_xy-z.dat
FILE_11 _03.04.05_xy-z.dat

/ 目标-之前
FILE02 _01.00.02_xy-z.dat
FILE04 _01.00.00_xy-z.dat
FILE_03 _01.00.01_xy-z.dat
FILE_11 _01.01.00_xy-z.dat

/ 目标-运动后(ToDo)
FILE01 _01.02.03_xy-z.dat-目标中不存在(简单复制)
FILE02 _02.03.04_xy-z.dat-替换为最新版本
FILE04 _01.00.00_xy-z.dat-无法下载最新文件(不执行任何操作)
FILE_03 _01.00.01_xy-z.dat-无法下载最新文件(不执行任何操作)
FILE_11 _03.04.05_xy-z.dat-替换为最新的

1 个答案:

答案 0 :(得分:0)

为“循环”添加库

<taskdef resource="net/sf/antcontrib/antlib.xml">
    <classpath>
        <pathelement location="lib/ant-contrib-1.0b3.jar" />
    </classpath>
</taskdef>

通过迭代下载中的所有文件进行更新

<target name="update" depends="download" description="moves downloded dat files to projects dest">
    <for param="file" delimiter=";">
        <path>
            <fileset dir="${downloads}" includes="*.dat" casesensitive="false" />
        </path>
        <sequential>
            <echo>file: @{file}</echo>
            <basename file="@{file}" property="filename" />
            <!--echo>filename: ${filename}</echo-->
            <propertyregex property="uniq" input="${filename}" regexp="^[^.]*(?=_)" select="\0" casesensitive="false" />
            <echo>uniq: ${uniq}</echo>
            <delete dir="${dest}" includes="${uniq}*" />
            <copy file="@{file}" tofile="${dest}/${filename}" />
            <var name="uniq" unset="true" />
            <var name="filename" unset="true" />
        </sequential>
    </for>
</target>