【问题标题】:File permissions are not being preserved while after zip压缩后文件权限未保留
【发布时间】:2013-07-27 03:17:49
【问题描述】:

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

我尝试了以下方法:

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

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

ZipArchiveEntry 条目 = 新的 ZipArchieveEntry(文件名);外场 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);

帮助非常感谢!

【问题讨论】:

  • Zip 不存储文件权限。提取文件时,会创建新文件。他们将拥有执行解压缩的用户的权限。见this
  • @SotiriosDelimanolis 那么如果我在我的 bash_profile 中设置了一个 umask,那么新提取的文件是否应该具有掩码设置的权限?因为即便如此,似乎也并非如此。我设置了一个 0027 的 umask,它将转换为 rw-r-----,但是当我提取文件时,它们似乎具有 rw-r--r-- 的权限。还有设置提取文件权限的典型过程是什么?
  • 我不知道umask 做了什么。根据您希望文件在解压缩后具有的权限,可以在解压缩之前更改用户,或者编写一个提取文件的脚本,然后更改解压缩文件的权限。

标签: java apache unix permissions zip


【解决方案1】:

您似乎需要尝试不同的存档格式。也许tar --preserve-permissions

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-29
      • 2013-01-28
      • 1970-01-01
      • 2016-04-21
      • 1970-01-01
      • 2012-05-17
      • 1970-01-01
      相关资源
      最近更新 更多