【问题标题】:Echo each file in Fileset with size, date and time使用大小、日期和时间回显 Fileset 中的每个文件
【发布时间】:2011-08-23 00:26:39
【问题描述】:

我正在将 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>

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

【问题讨论】:

    标签: ant file-listing


    【解决方案1】:

    有一个基于名为Ant Flaka 的外部任务套件的解决方案。 使用 Ant Flaka,您可以从文件集中访问底层文件对象及其属性(名称、时间、大小..)。无需通过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
    ...
    

    【讨论】:

    • 谢谢!我掉进罐子里,对 EL 做了些小改动,它就奏效了。 Flaka 是 Ant 非常需要的补充。
    【解决方案2】:

    我认为这在任何核心 Ant 任务中都不可用。

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

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

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

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

    【讨论】:

    • 我很惊讶这样的外部任务还没有出现。当然我不是第一个需要这个的人......?
    • 我可以按照你说的做,让 Ant 调用 DOS dir 命令。我希望将文件日期/时间放入 Ant 属性中,这样我就可以比较之前和之后的情况,如果它们没有改变,则发出警报,等等。
    • 您可能会在 Ant 中找到其他机制,通过不同的途径获得您需要的最终结果。我更新了我的答案,提到了一个检查文件新鲜度的内置机制。
    猜你喜欢
    • 2020-02-12
    • 1970-01-01
    • 2022-01-25
    • 2016-07-23
    • 2016-09-04
    • 1970-01-01
    • 2015-12-12
    • 2013-06-06
    • 2020-10-03
    相关资源
    最近更新 更多