Ant任务查找包含某个文件的所有子目录

Ant task to find all sub-directories that contain a certain file

我正在努力在 Ant 中解决这个任务。文档中的示例不多,我似乎无法在网上找到可靠的答案。

我需要扫描包含多个子目录的目录,例如

我需要从 Root 运行 build.xml,并使用任务扫描 TargetFolder 的所有子目录(因此文件夹 A、B、C 等),如果目录包含一个文件,foo.txt,运行 该目录的 <apply> 任务。

我可以执行 <dirset> 并获取子目录列表。我可以做一个单独的 <fileset> 来扫描 TargetFolder 并获取所有出现的 foo.txt。但是,我不知道如何组合这些东西,或者如何进行附加到 <apply> 任务的简单文件检查。

这是一种方法。像你说的那样使用 dirset,使用 <present> 选择器:

<dirset id="dirs" dir="Root">
  <present targetdir="Root">
    <mapper type="glob" from="*" to="*/foo.txt" />
  </present>
</dirset>
    
<apply executable="ls">
  <arg value="-alF" />
  <dirset refid="dirs" />
</apply>

您可以将两者合并为一个任务:

<apply executable="ls">
  <arg value="-alF" />
  <dirset id="dirs" dir="Root">
    <present targetdir="Root">
      <mapper type="glob" from="*" to="*/foo.txt" />
    </present>
  </dirset>
</apply>