我可以将unix权限存储在zip文件(由apache ant构建)中吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我可以将unix权限存储在zip文件(由apache ant构建)中吗?相关的知识,希望对你有一定的参考价值。

我正在为Java应用程序构建Linux安装程序,最后得到的是install.jar和setup.sh,并使用ant将其放入了zip文件。

这个想法是用户解压缩该zip文件,然后运行setup.sh,但麻烦的是,他们总是始终需要先chmod setup.sh才能赋予自己执行权限。

我想删除此步骤,我不确定问题是否存在:

  1. 该即时通讯在Windows上构建
  2. 我正在使用蚂蚁压缩任务构建
  3. 否则该zip不能预先获得权限,并且在没有x权限的情况下始终会解压缩。
答案

您不能在ZIP文件中存储Linux / Unix文件权限。

通过使用ZIP标题内的“外部属性”字段,可以在

编辑(在注释后添加)这些属性可以存储在ZIP文件中。 GNU的unzip显然能够读取该附加字段并恢复文件权限。 我不确定何时将其添加到ZIP格式中,因为早期版本-来自MS-DOS世界-不支持此功能。

TAR格式-一种“本机” Unix / Linux格式-旨在包括文件属性,Ant可以创建TAR文件,该文件将在所有Linux / Unix操作系统上保留属性。

 tarfileset> tar>
另一答案

您不必切换到tar文件。我不知道为什么不认识Ant的人会为此主题提供建议。

使用zipfileset的filemode参数。记录在http://ant.apache.org/manual/Types/zipfileset.html

另一答案

我认为您可以使用Apache Commons Compress完成此操作。

第一段:

访问内部和外部属性(某些zip实现用于存储Unix权限)。

[查看API并查找setUnixMode()

另一答案

zip / unzip在现代linux发行版中将保留文件权限。但是,您需要确保Windows中的zip压缩此名称。

另一答案

如果您使用的是tar文件而不是zip文件,它应该为您保留权限。文件的所有者和组可能不匹配,但是权限位将匹配。

另一答案

要扩展Blaine的答案,您可以使用<zipfileset>子元素来指定权限:

<zip destfile="build/MyApplication.zip" encoding="UTF-8">

    <zipfileset dir="${content-dir}" encoding="UTF-8"
        includes="**/setup.sh" filemode="755"/>

    <zipfileset dir="${content-dir}" encoding="UTF-8"
        excludes="**/setup.sh"/>

</zip>
另一答案
<shellscript shell="sh" dir="abc" failonerror="true">
            zip -ry abc.zip *
</shellscript>

上面的ant脚本调用一个shell脚本来创建zip归档文件,在其中很好地保留了权限。它适用于Ant 1.7及更高版本。但是我还没有尝试过验证在Windows上运行此ant脚本。在Mac上,效果很好。

以上是关于我可以将unix权限存储在zip文件(由apache ant构建)中吗?的主要内容,如果未能解决你的问题,请参考以下文章

Java/Groovy:ZIP 文件并为其分配权限

从 azure blob 存储文件生成 Zip 文件

从 azure blob 存储文件生成 Zip 文件

UNIX 文件权限

我可以将文件写入linux目录,指定cfscript中的文件权限吗?

如何在 git 存储库上正确使用组文件权限?