zip后,文件权限不会被保留

时间:2013-07-26 18:21:48

标签: java apache unix permissions zip

我试图在压缩它们之后保持某些文件权限但是,我注意到文件权限不会被保留。无论我做什么,解压缩文件的文件权限总是rw-r - r--。

我尝试了以下事项:

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

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

  

ZipArchiveEntry entry = new ZipArchieveEntry(filename); AsiExtrafield   temp = new AsiExtraField(); temp.setMode(777);   entry.addAsFirstExtraField(温度); zipoutputstream.putNextEntry(条目);

  • 对于ZipEntries,我尝试将setUnixMode()设置为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);

非常感谢!

2 个答案:

答案 0 :(得分:2)

ZIP格式可以将unix权限存储在"外部属性" ZIP标题内的字段。

顺便说一下,我已经使用maven-assembly-plugin在汇编描述符中使用<fileMode>0755</fileMode>创建了ZIP文件。

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

答案 1 :(得分:0)

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

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