仅复制具有另一个文件作为同级文件的文件 [基于扩展名]?
Copying only files which have another file as a sibling [based on extension]?
我正在尝试使用 ANT 将一些 C++ 构建文件复制到另一个目录中。
构建的输出如下所示:
/Build
/LibA
LibA.lib
LibA.pdb
/LibB
LibB.lib
LibB.pdb
/ProjA
myexe.exe
myexe.pdb
/Foo
foo.exe
foo.pdb
/...
现在,我想将所有 *.exe
文件及其 *.pdb
文件复制到另一个目录(但不是库的 *.pdb
文件)。
我试过:
<copy todir="outdir">
<fileset dir="Build">
<include name="**/*.exe" />
<include name="**/*.pdb" />
</fileset>
</copy>
不过,我也会在 LibA、LibB、... 文件夹中获取 *.pdb
文件。
有什么方法可以让我只复制具有 *.exe
文件的 pdb 文件和它们的同级目录中的文件?
遗憾的是,这些文件夹的命名方式不允许根据文件夹名称使用通配符。
当然,我可以单独列出每个文件,例如:
<include name="ProjA/*.pdb" />
<include name="Foo/*.pdb" />
<!-- ... -->
但是,我在想也许有一种优雅的方式可以指定“复制所有 *.exe
文件和所有 *.pdb
文件,这些文件旁边有一个 *.exe
文件".
您可以使用 <present>
选择器来查找“同级”文件,如下所示:
<copy todir="outdir">
<fileset dir="Build" includes="**/*.pdb">
<present targetdir="Build">
<mapper type="glob" from="*.pdb" to="*.exe" />
</present>
</fileset>
<fileset dir="Build" includes="**/*.exe" />
<flattenmapper />
</copy>
这只会复制具有匹配 .exe 文件的 .pdb 文件。
为简单起见,请为 exe 文件使用单独的文件集。
仅当您只想复制文件而忽略源中的目录结构时才需要展平映射器。
我正在尝试使用 ANT 将一些 C++ 构建文件复制到另一个目录中。
构建的输出如下所示:
/Build
/LibA
LibA.lib
LibA.pdb
/LibB
LibB.lib
LibB.pdb
/ProjA
myexe.exe
myexe.pdb
/Foo
foo.exe
foo.pdb
/...
现在,我想将所有 *.exe
文件及其 *.pdb
文件复制到另一个目录(但不是库的 *.pdb
文件)。
我试过:
<copy todir="outdir">
<fileset dir="Build">
<include name="**/*.exe" />
<include name="**/*.pdb" />
</fileset>
</copy>
不过,我也会在 LibA、LibB、... 文件夹中获取 *.pdb
文件。
有什么方法可以让我只复制具有 *.exe
文件的 pdb 文件和它们的同级目录中的文件?
遗憾的是,这些文件夹的命名方式不允许根据文件夹名称使用通配符。
当然,我可以单独列出每个文件,例如:
<include name="ProjA/*.pdb" />
<include name="Foo/*.pdb" />
<!-- ... -->
但是,我在想也许有一种优雅的方式可以指定“复制所有 *.exe
文件和所有 *.pdb
文件,这些文件旁边有一个 *.exe
文件".
您可以使用 <present>
选择器来查找“同级”文件,如下所示:
<copy todir="outdir">
<fileset dir="Build" includes="**/*.pdb">
<present targetdir="Build">
<mapper type="glob" from="*.pdb" to="*.exe" />
</present>
</fileset>
<fileset dir="Build" includes="**/*.exe" />
<flattenmapper />
</copy>
这只会复制具有匹配 .exe 文件的 .pdb 文件。
为简单起见,请为 exe 文件使用单独的文件集。
仅当您只想复制文件而忽略源中的目录结构时才需要展平映射器。