如何使用Ant删除除最新2个文件以外的所有文件

如何使用Ant删除除最新2个文件以外的所有文件,ant,Ant,使用Ant,我必须从备份文件夹中删除除最新2个文件以外的所有文件 我试图否定last count=“2”,但找不到正确的资源顺序 目前我正在这样做: <delete verbose="true"> <difference> <resources> <fileset dir="${backup}"/> </resources> <last count="

使用Ant,我必须从备份文件夹中删除除最新2个文件以外的所有文件

我试图否定
last count=“2”
,但找不到正确的资源顺序

目前我正在这样做:

<delete verbose="true">
    <difference>
        <resources>
            <fileset dir="${backup}"/>
        </resources>
        <last count="2">
            <sort>
                <date/>
                <resources>
                    <fileset dir="${backup}"/>
                </resources>
            </sort>
        </last>
    </difference>
</delete>


有更简单的方法吗?

我建议使用文件集选择器来选择应该对哪些文件执行操作

如果需求超出了ANT的正常功能,您可以编写标准脚本。以下示例基于日期删除文件:


我建议使用文件集选择器来选择应该对哪些文件执行操作

如果需求超出了ANT的正常功能,您可以编写标准脚本。以下示例基于日期删除文件:


这个问题导致了一个已应用于Ant 1.9.5(在撰写本文时尚未发布)的问题。直到1.9.4,没有更好的纯Ant解决方案,除非您想自己实现一个资源集合

从Ant1.9.5开始,您可以使用

<delete verbose="true">
    <allbutlast count="2">
        <sort>
            <date/>
            <resources>
                <fileset dir="${backup}"/>
            </resources>
        </sort>
    </allbutlast>
</delete>

这个问题导致了一个已应用于Ant 1.9.5(在撰写本文时尚未发布)的问题。直到1.9.4,没有更好的纯Ant解决方案,除非您想自己实现一个资源集合

从Ant1.9.5开始,您可以使用

<delete verbose="true">
    <allbutlast count="2">
        <sort>
            <date/>
            <resources>
                <fileset dir="${backup}"/>
            </resources>
        </sort>
    </allbutlast>
</delete>

我非常喜欢Stefan Bodewig给出的答案,我迫不及待地想了解Ant 1.9.6(撰写本文时的当前版本),但我已经被Ant 1.9.4锁定了。所以我写了这个小东西,删除旧目录,但保留最新的5。也许这对其他人也有用

PS
在我编写脚本时,我没有注意到马克·奥康纳提出的解决方案有多么强大。我可能应该将我的解决方案合并到脚本选择器中,但现在为时已晚-( 如果您想知道这是什么:它是一个JavaScript脚本,在。我更喜欢Groovy或Ruby,但我选择了JavaScript,因为它已经在我当前依赖的工具包中(有关更多详细信息,请参阅)

file2.lastModified()){
返回-1
}
返回0;
}
//排序表
目录.排序(compareByLastModified)
//准备“删除”任务
var delTask=project.createTask(“删除”);
delTask.setQuiet(true);
//删除列表中除最后N个目录以外的所有目录
对于每个(目录中的var dir.slice(N)){
//println(“del”+dir.toString())
delTask.setDir(dir)
delTask.perform()
}
]]> 

我非常喜欢Stefan Bodewig给出的答案,我迫不及待地想了解Ant 1.9.6(撰写本文时的当前版本),但我已经被Ant 1.9.4锁定了。所以我写了这个小东西,删除旧目录,但保留最新的5。也许这对其他人也有用

PS
在我编写脚本时,我没有注意到马克·奥康纳提出的解决方案有多么强大。我可能应该将我的解决方案合并到脚本选择器中,但现在为时已晚-( 如果您想知道这是什么:它是一个JavaScript脚本,在。我更喜欢Groovy或Ruby,但我选择了JavaScript,因为它已经在我当前依赖的工具包中(有关更多详细信息,请参阅)

file2.lastModified()){
返回-1
}
返回0;
}
//排序表
目录.排序(compareByLastModified)
//准备“删除”任务
var delTask=project.createTask(“删除”);
delTask.setQuiet(true);
//删除列表中除最后N个目录以外的所有目录
对于每个(目录中的var dir.slice(N)){
//println(“del”+dir.toString())
delTask.setDir(dir)
delTask.perform()
}
]]> 

我认为没有比这更简单的了。您可能希望提取
文件集
,并为其提供一个id,以使其干燥并只扫描
备份
。另外,包装
资源
容器是冗余的,但没有根本不同的方法。Ant的一个增强请求是更容易使用“除最后两个之外的所有”属性-可能对
第一个
属性使用负数,或者使用单独的属性。谢谢@StefanBodewig。我在上提出了一个增强请求。刚刚解决为已修复,在Ant 1.9.5中,您可以使用
,我认为没有比这更简单的了。您可能希望提取
文件集
,并为其提供一个id,以使其干燥并只扫描
备份
。另外,包装
资源
容器是冗余的,但没有根本不同的方法。Ant的一个增强请求是更容易使用“除最后两个之外的所有”属性-可能对
第一个
属性使用负数,或者使用单独的属性。谢谢@StefanBodewig。我在上提出了一个增强请求。刚刚解决为已修复,在Ant 1.9.5中,您可以使用
谢谢,我已改为使用文件集选择器。谢谢你的脚本想法,虽然内置资源对我来说工作会少一些。谢谢,我已经开始使用文件集选择器了。谢谢你的脚本想法,虽然内置资源对我来说工作更少。