4

我试图在压缩后维护某些文件权限,但是,我注意到文件权限没有被保留。无论我做什么,解压缩文件的文件权限始终是 rw-r--r--。

我尝试了以下事情:

  • 但是,在我的 bash_profile 中将 umask 设置为 0027,我注意到默认情况下,新创建的 zip 文件会为“0022”文件(即 rw-r--r--)创建权限。

  • 我尝试使用模式 777 设置 AsiExtraField 并将其附加到 ZipArchiveEntry,但是,它似乎不会影响烫发。

ZipArchieveEntry 条目 = 新的 ZipArchieveEntry(文件名);AsiExtrafield temp = new AsiExtraField(); temp.setMode(777); entry.addAsFirstExtraField(temp); zipoutputstream.putNextEntry(entry);

  • 对于 ZipEntries,我尝试将 UnixMode() 设置为 777,但是,解压缩的文件仍然具有 rw-r--r-- 的权限。
ZipEntry entry = new ZipEntry(filename);
  entry.setUnixMode(777);
  zipoutputstream.putNextEntry(entry);
  • 最后,我在压缩之前明确设置了目标文件的文件权限,但是,文件权限不会被复制。
Runtime.getRuntime.exec("chmod 777" + file.getCanonicalPath()):
ZipEntry entry = new ZipEntry(filename);
zipoutputstream.putNextEntry(entry);

非常感谢帮助!

4

2 回答 2

2

ZIP 格式可以将 unix 权限存储在 ZIP 标头内的“外部属性”字段中。

顺便说一句,我已经通过<fileMode>0755</fileMode>在程序集描述符中使用使用 maven-assembly-plugin 创建的 ZIP 文件完成了此操作。

为了以编程方式从 Java 中提取存档,同时保留权限,有一个名为jarchivelib的commons-compress很好的包装器,它支持多种格式,包括 ZIP、tar.gz。它提取正确保留 UNIX 权限。

于 2015-11-17T16:57:00.463 回答
0

看起来您需要尝试不同的存档格式。也许tar --preserve-permissions

另一种选择是分别保存权限并在解压缩时重新应用它们。您可以将.saved_permissions文件添加到存档中。StackOverflow上有一些可以执行此操作的脚本示例。

于 2013-07-26T20:03:05.633 回答