使用ant解压和压缩文件时保留文件权限

10

我正在编写一个ant build.xml文件,它会执行以下操作:

  • 接收一个压缩的文件夹(.zip)
  • 解压缩它
  • 添加一些文件
  • 将结果文件压缩成.zip格式

以下是build.xml文件的代码片段:

<!-- Unzip SDK to a temporary directory -->
<unzip src="${zipFile}" dest="tmp"/>

<!-- pull in the files from another directory -->
<copy todir="tmp/someDirectory" >
  <fileset dir="${addedFiles}" />
</copy>

<!-- Zip up modified SDK -->
<zip destfile="${destDir}" basedir="tmp"/>

这一切都完美地运作,除了在运行ant构建之前为压缩文件设置的权限丢失在ant构建创建的压缩文件中。例如,先前可执行的文件现在不再是可执行的。

所以我的问题是:是否可能使用ant将文件添加到zip存档文件中,同时不破坏已有文件的权限?

我正在使用Ant 1.7.1

4个回答

9

使用Ant解压目标时,我遇到了相同的问题:

<unzip src="${project.build.directory}/${project.build.finalName}.zip" dest="${user.home}/apps" overwrite="true" />

使用上述解压目标时,zip文件内的shell脚本权限会丢失。
经过一些调查,我使用以下带有unzip命令行参数的“exec”ant目标,它起作用了。
<!-- Use command line unzip to keep file permissions -->
<exec executable="unzip" spawn="true">
    <arg line="-o ${project.build.directory}/${project.build.finalName}.zip -d ${user.home}/apps" />
</exec>

我希望当你遇到这种问题时,这篇文章能够对你有所帮助。
谢谢, J

这将解压缩您的 zip 文件,并且您获得了与压缩时相同的权限? - fscore

8

您无法让zip任务保留文件权限,但可以显式设置它们:

<zip destfile="installer.zip" >
<zipfileset filemode="755" dir="../" includes="artisan/install.*" />
</zip>

(这对我在Windows和OSX上都有效)

它也可以在GNU Linux下运行,我刚刚用Mageia Linux 4测试过了。谢谢。 - gouessej

3
原来,由于Java的限制,当解压缩时,蚂蚁将破坏有关权限的所有信息。然而,可以通过向现有的zip文件中添加文件来保留现有文件的权限。
<!-- Add to zip -->
<zip destfile="${existingZipFiledirectory}.zip"
   basedir="${directoryOfFilesToAdd}"
   update="true"
/>

以上脚本将更新指定的zip文件,使用basedir中的内容,保留原始zip文件中的文件权限。


-1
据我所知,此功能(preserve0permissions)是在Ant 1.8中引入的。早期版本的Ant未保留权限。
如果您被困在Ant 1.7.1中,可以使用Tar,它 - 如果我没有记错的话 - 存储权限。

1
不,preserve0permissions 是不同的,它与从另一个 zip 文件中添加条目有关(使用 <zipfileset src="...">)。Ant 一直能够将权限从一个 zip 复制到另一个 zip,但在 Ant 1.8 之前,如果源 zip 文件对于给定条目的权限字段具有零值,则目标文件中的条目始终会使用默认权限(通常为 644 或 755)创建。preserve0permissions="yes" 将保留目标 zip 文件中的零值。 - Ian Roberts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接