【问题标题】:How can I zip multiple folders individually with ant?如何使用 ant 单独压缩多个文件夹?
【发布时间】:2011-06-10 00:16:36
【问题描述】:

如果我有一个包含多个子文件夹(例如 foo、bar、baz)的文件夹,我如何使用 ant 将它们单独压缩成 foo.zip、bar.zip 和 baz.zip,而不是一一进行?

理想情况下,还应该有一种方法来指定要压缩的文件/子文件夹,而不是“每个单个”。

【问题讨论】:

  • 您使用的是什么操作系统?这听起来像是 shell/命令提示符的工作。
  • Linux,是的,这很容易,但我特别需要用 ant 完成。

标签: ant


【解决方案1】:

你不想使用 ant-contrib。 ant-contrib 很烂,每次使用它,都会产生技术债务。使用 ant 时要记住的第一件事:让 ant 成为蚂蚁。蚂蚁就是这样。它是声明性的。 The original intent of ant 是简单的属性声明,并在 java 中完成工作(你有一个带有调试器和测试框架的真正 IDE)。正如elements of ant style 中所述 - “让蚂蚁成为蚂蚁”。如果你必须使用 ant-contrib,你应该做你自己的 ant 任务。如果你不能这样做,请不要使用蚂蚁。 ant-contrib 采取最糟糕的措施 ant 使情况变得更糟,您很快就会发现事情无法维护。吐槽够了。

您甚至不需要为此创建任务,这应该可以工作...它将 /tmp 中的所有目录都放入并压缩。应该能让你大部分时间到达那里。

    <mapper id="zip" type="glob"
    from="*"
    to="*.zip"/>

<target name="zip-craziness">
    <apply executable="zip">
        <targetfile/>
        <srcfile/>
        <dirset dir="/tmp" />
         <mapper refid="zip"/>
    </apply>
</target>

【讨论】:

  • 谢谢,有没有类似“apply”的东西可以运行 ant 任务而不是外部程序(没有 ant-contrib)?
  • 是的,不,不支持映射器或重定向器 - 你可以做一个 zip 任务。你说得对,调用 zip 可执行文件不是最佳选择……它应该几乎总是在你的 linux 机器上工作,但你会在 pc 上遇到麻烦。
  • “不支持映射器或重定向器” - 什么?
  • 哦。那应该是:“zip ant 任务不支持映射器或重定向器”。我什至不应该在喝咖啡前打字。
【解决方案2】:

我用 for-each from ant contrib 处理这种事情。你可以改进这个问题:Ant: How to execute a command for each file in directory?

【讨论】:

    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 2016-12-17
    相关资源
    最近更新 更多