【问题标题】:Ant: Zip the contents of a directory, without the top-level directory itselfAnt:压缩目录的内容,不包括顶级目录本身
【发布时间】:2012-02-02 18:38:39
【问题描述】:

如何使用 Ant 在某个根目录中创建包含所有文件和嵌套目录的 zip,但从 zip 中排除顶级目录本身。

例如,假设我有这个文件结构:

/foo
    splat.js
    /bar
        wheee.css

我希望 zip 在 /bar 中包含 splat 和 wheee,但我希望所有内容都包含在 'foo' 目录中。换句话说,将其解压缩到 /honk 应该创建一个 foo 目录; splat 和 bar 应该在 /honk 的根目录下结束。

我目前正在使用这个(无关的细节已删除):

<zip destfile="${zipfile}" basedir="" includes="${distRoot}/**/*.*" />

什么样的文件集选择可以替代“包含”规范来实现这一点?

【问题讨论】:

  • 嵌套的&lt;fileset dir="foo" includes="**/*" /&gt; 代替包含标签有帮助吗?或basedir="foo" includes="**/*"
  • +1 获取 mihi 的评论,另见:ant.apache.org/manual/Tasks/zip.html -- 它描述了如何在 zip 任务中使用文件集作为嵌套元素。
  • 谢谢大家,这正是我所需要的,我有时间会更彻底地检查:&lt;zip destfile="${zipfile}" basedir="${distRoot}" includes="**/*" /&gt;。 @mihi,如果你回答这个问题,我会把它标记为正确的。
  • 与一个不错的解决方案相关:stackoverflow.com/q/22759314/435605

标签: ant zip


【解决方案1】:

它不是动态的,但使用 fullpath 属性可以定义 zip 文件的路径结构。见蚂蚁文档:http://ant.apache.org/manual/Types/zipfileset.html

<zip destfile="YourZipName.zip">
    <zipfileset fullpath="splat.js" dir="foo" includes="splat.js"/>
    <zipfileset fullpath="bar/wheee.css" dir="foo/bar" includes="wheee.css"/>
</zip>

这可能会动态地满足您的需求。它应该拉入 foo 目录中的所有内容,然后将其压缩。这只是几个额外的步骤。

<mkdir dir="DirToBeZipped"/>
<copy todir="DirToBeZipped">
    <fileset dir="foo" includes="*"/>
</copy>
<zip destfile="YourZipName.zip" basedir="DirToBeZipped"/>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多