使用大小,日期和时间回显Fileset中的每个文件

时间:2011-05-11 05:41:49

标签: ant file-listing

我正在将DOS批处理文件转换为Ant。在批处理文件的末尾,我使用DOS dir命令打印出复制的文件列表,包括大小,日期和时间。我想在Ant脚本的末尾做同样的事情。到目前为止,我有:

<!-- LIST COPIED FILES -->
<target name="summary" depends="backup">
    <fileset id="zipfiles" dir="${dest}" casesensitive="yes">
        <include name="*.zip"/>
    </fileset>  

    <property name="prop.zipfiles" refid="zipfiles"/>
    <echo>${prop.zipfiles}</echo>       
</target>

如何修改上述内容以在单独的行上打印每个文件,包括大小,日期和时间?

2 个答案:

答案 0 :(得分:3)

有一种基于外部任务套件的解决方案,名为Ant Flaka。 使用Ant Flaka,您可以从文件集访问基础文件对象及其属性(名称,mtime,大小..)。无需通过apply / cmd打开外部进程

<project name="demo" xmlns:fl="antlib:it.haefelinger.flaka">
    <fl:install-property-handler />

    <!-- as fileset has no absolute pathnames we need
         path combined with pathconvert -->
    <path id="foobar">
        <fileset dir="/home/gilreb/Downloads">
            <include name="*.zip"/>
        </fileset>
    </path>

    <pathconvert property="zipfiles" refid="foobar"/>

    <!-- iterate over the listentries, get access to
         the underlying fileobject and echo its properties -->
    <fl:for var="f" in="split('${zipfiles}', ':')">
        <echo>
      #{  format('filename %s, last modified %tD, size %s bytes', f.tofile.toabs,f.tofile.mtime,f.tofile.size)  }
     </echo>
    </fl:for>

</project>

输出=

...  
   [echo]       filename /some/path/apache-ant-1.8.2-bin.zip, last modified 03/16/11, size 10920710 bytes
     [echo]      
     [echo]       filename /some/path/apache-ant-1.8.2-src.zip, last modified 03/16/11, size 8803388 bytes
     [echo]      
     [echo]       filename /some/path/apache-ant-antunit-1.1-bin.zip, last modified 04/17/11, size 70477 bytes
...

答案 1 :(得分:2)

我认为任何核心Ant任务都没有。

您可以编写自己的自定义任务来执行此操作。

或者,您可以使用Apply任务为文件集中的每个文件执行dir之类的系统命令。例如:

<apply executable="cmd" osfamily="windows">
<arg value="/c"/>
<arg value="dir"/>
<fileset dir=".">
  <include name="*.zip"/>
</fileset>
</apply>

按照下面的评论,您可以使用Uptodate任务检查所有zip文件是否比某个目标文件(您可以在创建拉链之前创建)更新。