Удалить файл с условием Apache Ant - PullRequest
0 голосов
/ 29 августа 2018

У меня есть каталог с файлами. Мне нужно удалить только некоторые из них с условием. Например ... моя папка содержит:

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

Мне нужно удалить только старые версии той же библиотеки. В этом примере мне нужно удалить файлы: super-lib-1.0.jar, super-lib-2.0.jar, cool-lib-3.3.1.jar

1 Ответ

0 голосов
/ 29 августа 2018

вы можете сделать это с помощью javascript в ant следующим образом:

<?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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...