【问题标题】:How can I print a fileset to a file, one file name per line?如何将文件集打印到文件中,每行一个文件名?
【发布时间】:2009-09-21 21:05:25
【问题描述】:

我有一个填充的文件集,我需要将匹配的文件名打印到一个文本文件中。

我试过了:

<fileset id="myfileset" dir="../sounds">
    <include name="*.wav" />
    <include name="*.ogg" />
</fileset>

<property name="sounds" refid="myfileset" />
<echo file="sounds.txt">${sounds}</echo>

将所有文件打印在一行上,用分号分隔。我需要每行有一个文件。如何在不调用操作系统命令或编写 Java 代码的情况下做到这一点?

更新

啊,应该更具体 - 列表不能包含目录。无论如何,我将 ChssPly76 标记为已接受的答案,因为 pathconvert 命令正是我所缺少的。为了剥离目录并仅列出文件名,我使用了"flatten" mapper

这是我最终得到的脚本:

<fileset id="sounds_fileset" dir="../sound">
    <include name="*.wav" />
    <include name="*.ogg" />
</fileset>

<pathconvert pathsep="&#xA;" property="sounds" refid="sounds_fileset">
    <mapper type="flatten" />
</pathconvert>

<echo file="sounds.txt">${sounds}</echo>

【问题讨论】:

    标签: ant fileset


    【解决方案1】:

    使用PathConvert 任务:

    <fileset id="myfileset" dir="../sounds">
        <include name="*.wav" />
        <include name="*.ogg" />
    </fileset>
    
    <pathconvert pathsep="${line.separator}" property="sounds" refid="myfileset">
        <!-- Add this if you want the path stripped -->
        <mapper>
            <flattenmapper />
        </mapper>
    </pathconvert>
    <echo file="sounds.txt">${sounds}</echo>
    

    【讨论】:

    • Pathconvert 任务似乎创建了绝对文件路径。有没有可能阻止这种情况?我有同样的问题,想打印文件列表,但不是完整路径,而是相对路径(所以 flatten 对我不起作用)
    • @Soccertrash,我通过使用&lt;replace file="${sounds.txt}" token="${basedir}\" value="" /&gt; 对文件进行后处理以删除公共基本目录前缀(在我的情况下)解决了这个问题。
    • @mgaert,您可以使用&lt;map from="${basedir} to=""/&gt; 就地完成。将其放在&lt;pathconvert&gt; 中。
    【解决方案2】:

    从 Ant 1.6 开始你可以使用toString:

    <echo file="sounds.txt">${toString:myfileset}</echo>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多