如何使用其时间戳列出目录中的两个最新文件夹

时间:2019-05-08 10:36:23

标签: list ant directory timestamp ant-contrib

我有一个父文件夹,而里面有几个文件夹。为了实现自动化,我想根据时间戳获取两个文件夹中的最新文件夹。

我尝试使用timstampselector来获取最新文件夹。

    <timestampselector property="latest.modified">
        <path>
            <dirset dir="MyDirectoryPath">
                <include name="*" />
            </dirset>
        </path>
    </timestampselector>

在我的父文件夹中,有以下文件夹:

test      (Last modified on 07/04/2019 10:30 AM)
check     (Last modified on 08/04/2019 05:00 PM)
integrate (Last modified on 08/04/2019 12:30 PM)
slave     (Last modified on 09/04/2019 05:00 PM)

我们的脚本应采用最新的两个修改后的文件夹,在上述情况下,它应为 integrate&slave

我该如何实现?

2 个答案:

答案 0 :(得分:1)

通常来说,最好尽可能避免使用蚂蚁。可以使用本机Ant的资源集合快速解决此特定问题:

<last count="2" id="latest.two.files">
    <sort>
        <date />

        <fileset dir="MyDirectoryPath" />
    </sort>
</last>

完整的示例目标:

<target name="select-latest">
    <delete dir="testdir" />
    <mkdir dir="testdir" />

    <touch file="testdir/test" datetime="07/04/2019 10:30 AM" />
    <touch file="testdir/check" datetime="08/04/2019 05:00 PM" />
    <touch file="testdir/integrate" datetime="08/04/2019 12:30 PM" />
    <touch file="testdir/slave" datetime="09/04/2019 05:00 PM" />

    <last count="2" id="latest.two.files">
        <sort>
            <date />

            <fileset dir="testdir" />
        </sort>
    </last>

    <echo message="${toString:latest.two.files}" />
</target>

答案 1 :(得分:0)

您正在使用的任务是Ant-Contrib的一部分,而不是核心Ant。该文档说您可以使用count属性来说明要选择多少个项目。根据您的情况,将其设置为两个:

<timestampselector property="latest.modified" count="2">
  <path>
    <dirset dir="MyDirectoryPath">
      <include name="*" />
    </dirset>
  </path>
</timestampselector>

这对我来说似乎很好:该属性设置为两个目录的逗号分隔列表。