1

好的,这看起来应该很简单。我正在使用 Apache Ant 1.8,我有一个目标:

<delete file="output/program.tar.bz2"/>
<tar basedir="input" destfile="output/program.tar.bz2" compression="bzip2">
  <tarfileset dir="input">
    <include name="goodfolder1/**"/>
    <include name="goodfolder2/**"/>
    <exclude name="**/badfile"/>
    <exclude name="**/*.badext"/>
  </tarfileset>
</tar>

我希望它生成 input/goodfolder1 和 input/goodfolder2 的 .tar.bz2,不包括名为“badfile”的文件,不包括扩展名为“.badext”的文件。它给了我一个 .tar.bz2,但它包括 badfile 和 *.badext——排除项似乎被忽略了。

包含/排除的顺序似乎没有什么区别。我尝试将包含/排除包装在 a 中(文档说它是隐含的?),但没有任何区别。

我确信我缺少一些简单的东西,因为手册有一个非常相似的例子,尽管在一些不同的上下文中。

编辑:看起来它可能与dir="input"属性有关:它在“输入”中添加所有内容,然后将 tarfileset 中的所有内容添加到该属性中。我想要的文件在 program.tar.bz2 中出现两次,但被排除的文件只出现一次。但是dir是强制性的,我看不出这与手册中的示例有何不同。

4

2 回答 2

2

啊,<tarfileset>本身就是造成我问题的原因。

如果我删除它,并将包含/排除直接放在 中<tar>,它可以正常工作。

于 2011-01-07T19:55:01.293 回答
0

我认为您将需要使用两个<tarfileset>元素。和元素仅用于文件<include><exclude>不适用于目录。例子:

<tar basedir="input" destfile="output/program.tar.bz2" compression="bzip2"> <tarfileset dir="goodfolder1"> <exclude name="**/badfile"/> <exclude name="**/*.badext"/> </tarfileset> <tarfileset dir="goodfolder2"> <exclude name="**/badfile"/> <exclude name="**/*.badext"/> </tarfileset> </tar>

于 2011-01-07T19:54:22.077 回答