运维开发网
广告位招商联系QQ:123077622
 
广告位招商联系QQ:123077622

在Ant中以数字方式对文件集进行排序

运维开发网 https://www.qedev.com 2020-05-08 18:39 出处:网络 作者:运维开发网整理
我有这样的文件夹结构: wsdl/v1,----,v11 我需要将其所有文件复制到名为“latestVersion”的新文件夹中,我需要将复制顺序从v1维护到v11.所以要做到这一点,我需要在复制时按名称对目录进行排序.我的代码是这样的: <copy todir="${srcdist.layout.dir}/etc/wsdl/latestVersion" flatten="true" overwr
我有这样的文件夹结构:

wsdl/v1,----,v11

我需要将其所有文件复制到名为“latestVersion”的新文件夹中,我需要将复制顺序从v1维护到v11.所以要做到这一点,我需要在复制时按名称对目录进行排序.我的代码是这样的:

<copy todir="${srcdist.layout.dir}/etc/wsdl/latestVersion" flatten="true" overwrite="true" verbose="true">
    <sort>
        <fileset dir="../../sdk/etc/wsdl">
            <include name="**/*.wsdl"/>
        </fileset>
    </sort>
</copy>

我希望复制从v1开始,到v11结束.但是,它复制如下:

v1,v10,v11,v2,v3,v4,v5,v6,v7,v8,v9

相反,我如何让Ant复制如下:

v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11
您可以使用Ant脚本中嵌入的JavaScript对目录名称进行数字排序.

然后,您可以使用第三方Ant-Contrib library中的<for> task一次一个地从已排序的目录中复制:

<dirset id="wsdl.dirs" dir="../../sdk/etc/wsdl" includes="v*"/>
<script language="javascript">
<![CDATA[
    var dirSet = project.getReference( "wsdl.dirs" );
    var ds = dirSet.getDirectoryScanner( project );
    var includes = ds.getIncludedDirectories();
    var versions = [];
    for ( var i = 0; i < includes.length; i++ ) {
        var dirname = includes[i]
        // chop off the "v" from the front
        var dirVersion = dirname.substr(1);
        versions.push( dirVersion );
    }
    versionsSorted = versions.sort(function (a, b) {
        return a - b;
    });
    // the "list" of <for> takes a comma-delimited string
    project.setProperty( "versions", versionsSorted.join( ',' ) );
]]>
</script>
<echo>sorted versions: ${versions}</echo>

<for list="${versions}" param="version">
    <sequential>
        <copy todir="${srcdist.layout.dir}/etc/wsdl/latestVersion">
            <fileset dir="../../sdk/etc/wsdl/v@{version}" includes="**/*.wsdl"/>
        </copy>
    </sequential>
</for>

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消