Ant zipfileset 以包含某个目录中的文件,但如果它们在另一个目录中重复,则不包含这些文件



我正在研究一个蚂蚁目标,它将一些上游目标生成的少量目录和文件作为输入,并输出一个zip文件。

因此,我的目标目前看起来有点像这样:

<target name="package-the-zip" depends="upstream-thing1, upstream-thing2">
<!-- a little bit of tweaking happens here -->
<zip destfile="myPackage.zip">
<zipfileset dir="PARENT-DIR" prefix="myParent">
<!-- a handful of include and exclude tags are here -->
</zipfileset>
</zip>
</target>

截至目前,PARENT-DIR/foo/包含一些文件 - 例如,称它们为 a、b、c、d、e、f 和 g。 随之而来的是, PARENT-DIR/childDirA/foo/包含 a,b,e,g,x,y 和 PARENT-DIR/childDirB/foo/包含多个子项的 b,c,e,f,q,r 等。 换句话说,每个孩子的/foo/都包含一些父级的重复项,以及一两个自身独有的东西。 我想消除生成的zip中的重复项。

根据上述示例,我可以接受以下任一解决方案:

  1. PARENT-DIR/foo/包含 a,b,c,d,e,f,g,x,y,q,r,每个子项的/foo/为空。
  2. PARENT-Dir/foo/包含
  3. a,b,c,d,e,f,g, childDirA/foo/包含 x,y 和 childDirB/foo/仅包含q,r。

其他一些可能有用的信息:

  • 子目录的数量很少 (<20) 并且应该稳定,因此单独操作它们是可以接受的。
  • 每个/foo/中的文件数量很大 (~100),并且可能会发生变化,因此逐个列出它们不是一个好的解决方案。

是否有一些压缩文件集模式和选择器的组合可以实现这一点?

这真的是Saurabh14292的答案,不是我的。 他似乎选择不将他的评论转换为答案,因此CW。

解决方案是在压缩之前将子文件复制到父文件中。 复制会添加唯一的文件并忽略重复项。 然后,在压缩时,排除子文件。 问题中的截图变为:

<target name="package-the-zip" depends="upstream-thing1, upstream-thing2">
<!-- a little bit of tweaking happens here -->
<copy todir="PARENT-DIR/foo">
<fileset dir="PARENT-DIR/childDirA/foo">
<!-- include as needed -->
</fileset>
</copy>
<!-- repeat copy for each child as needed -->
<zip destfile="myPackage.zip">
<zipfileset dir="PARENT-DIR" prefix="myParent">
<!-- a handful of include and exclude tags are here -->
<exclude name="PARENT-DIR/childDir*/foo" />
</zipfileset>
</zip>
</target>

相关内容

  • 没有找到相关文章

最新更新