【问题标题】:Generating a comma-delimited file list with Ant使用 Ant 生成逗号分隔的文件列表
【发布时间】:2009-07-19 10:31:14
【问题描述】:

我正在尝试在当前目录下创建一个以逗号分隔的文件或目录列表。例如,假设我有以下文件夹结构:

根 -- 目录1 -- 目录2 ...

我想生成一个包含“Directory1,Directory2”的变量或属性。我尝试在<dirset dir="." includes="*"> 上进行迭代(使用 ant-contrib “for”任务),但这会生成绝对路径;然后,我使用“basename”任务提取了文件名,但这又会生成输出property。由于属性是不可变的,我在实践中得到的是“Directory1,Directory1,...”

有没有更明智的方法来做这件事,还是我必须编写一个 Java 扩展来为我做这件事?

【问题讨论】:

    标签: java ant


    【解决方案1】:

    pathconvert 任务可用于格式化具有任意分隔符的目录集:

    <dirset id="dirs" dir="." includes="*"/>
    <pathconvert dirsep="/" pathsep="," property="dirs" refid="dirs"/>
    <echo message="${dirs}"/>
    

    【讨论】:

    • 花费更多精力(使用 globmapper 和其他一些小技巧),我很确定您在示例中将 dirsep 与 pathep 切换,但您指出了我需要的确切方向。谢谢!
    • 看起来像 'dirsep' 和 'pathsep' 值被交换了。我认为您的意思是 dirsep="/" pathsep=","
    【解决方案2】:

    确认 Jörn 的回答正是我所需要的(作为起点)。

    <dirset id="dirset.sandbox" dir="${sandbox.dir}" includes="*">
      <exclude name="output"/>
    </dirset>
    <pathconvert pathsep=" " property="dirs.sandbox" refid="dirset.sandbox">
      <mapper type="flatten"/>
    </pathconvert>
    <echo message="[*** the sandbox dir list is ${dirs.sandbox} ***]"/>
    

    sandbox.dir 是一个类似于 /root/build/workspace 的绝对路径,包含多个子目录。 输出是这些目录的空格分隔列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-20
      • 1970-01-01
      • 2016-07-29
      • 2010-10-14
      • 2013-07-03
      • 1970-01-01
      • 2012-06-05
      • 2013-10-05
      相关资源
      最近更新 更多