使用Apache Ant删除带有条件的文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Apache Ant删除带有条件的文件相关的知识,希望对你有一定的参考价值。

我有一个文件的目录。我只需要删除其中一些条件。例如......我的文件夹包含:

super-lib-1.0.jar
super-lib-2.0.jar
super-lib-2.1.jar
cool-lib-3.3.1.jar
cool-lib-3.3.2.jar

我只需删除相同lib的旧版本。在这个例子中,我需要删除文件:super-lib-1.0.jar,super-lib-2.0.jar,cool-lib-3.3.1.jar

答案

你可以用这样的方式在ant中使用javascript来做到这一点:

<?xml version="1.0" encoding="UTF-8"?>
<project default="init" name="My Project">

    <scriptdef name="removeAllButLatest" language="javascript">
        <attribute name="dir"/>
        <![CDATA[

            dir = new java.io.File(attributes.get("dir"));
            files = dir.listFiles();
            java.util.Arrays.sort(files, new java.util.Comparator({ 
                compare: function(f1,f2) {
                    n1 = f1.getName();
                    n2 = f2.getName();
                    v1 = Number(n1.substring(n1.lastIndexOf('-')+1,n1.lastIndexOf('.')).replace(/./g, ""));
                    v2 = Number(n2.substring(n2.lastIndexOf('-')+1,n2.lastIndexOf('.')).replace(/./g, ""));
                    n1 = n1.substring(0, n1.lastIndexOf('-'));
                    n2 = n2.substring(0, n2.lastIndexOf('-'));
                    if (n1 < n2) {return -1;}
                    if (n1 > n2) {return 1;}
                    if (v1 < v2) {return 1;}
                    if (v1 > v2) {return -1;}
                    return 0;   
                } 
            }));

            echo = project.createTask( "echo" );

            name = "";

            for(i = 0; i < files.length; i++) {

                n = files[i].getName();
                n = n.substring(0, n.lastIndexOf('-'));

                if(n == name){
                    echo.setMessage( "deleting file: " + files[i] );
                    echo.perform();
                    files[i].delete();
                }
                else {
                    name = n;
                }
            }

      ]]>
    </scriptdef>

    <target name="init">
        <removeAllButLatest dir="/home/guest/Desktop" />
    </target>

</project>

以上是关于使用Apache Ant删除带有条件的文件的主要内容,如果未能解决你的问题,请参考以下文章

java 小工具之--zip包解压,删除目录及文件

我可以将unix权限存储在zip文件(由apache ant构建)中吗?

如何删除Ant中某些文件夹下的所有子文件夹?

使用带有 viewpager 的异步任务时的竞争条件

java如何打包

如果我使用ANT知道该文件夹的不完整名称,如何将文件复制到文件夹