【问题标题】:Extract .xip file into a folder from command line?从命令行将 .xip 文件提取到文件夹中?
【发布时间】:2017-07-01 01:21:47
【问题描述】:

Apple 偶尔会使用专有的 XIP 文件格式,尤其是在分发 Xcode 版本时。它类似于 zip,但经过签名,允许在接收系统上进行验证。当 XIP 文件打开(通过双击)时,存档实用程序将展开它,但前提是数字签名完好无损。

有谁知道如何将 XIP 文件从终端命令行提取到特定文件夹?如果签名无效,有什么办法可以取消归档这种类型的文件?

【问题讨论】:

  • 如果它是“只是一个 zip”,那么大概普通的解压缩工具就可以解决问题。还是您也想验证签名?
  • 它不仅仅是一个签名的 zip 文件;它是一个签名的 xar 存档,通常应用了基于 LZMA 的压缩。
  • @Geoff Nixon 下面给出的答案对我有用
  • @antony-raphel 我在下面的回答是否充分回答了您的问题?
  • 这能回答你的问题吗? How to extract xip archive using command line?

标签: macos command-line command-line-interface extract archive


【解决方案1】:

不妨试试:

xip -x [path to .xip file]

这会将存档解压缩到您当前的工作目录中。

至于解压到特定目录,没有明确的选项,但xip -x 会解压到当前工作目录。因此,cding 到您想要提取文件的位置应该可以工作;如果您特别需要自动执行此操作,请使用以下脚本:

#!/bin/sh

xipfile="$(cd $(dirname "$1"); pwd -P)/$(basename "$1")" # a portable "realpath"

cd "$2"
xip -x "$xipfile"

应该做我认为的伎俩吗?

【讨论】:

  • +1 您是如何得知 -x 标志的?它既没有记录在手册页上,也没有记录在命令的帮助中......
  • @rexford 我敢说大多数 Apple 的实用程序都有隐藏标志。不幸的是,找到它们并不是一个简单的过程。事实上,我只是asked a question myself about this myself(也就是说,如果有更好的方法可以找到这些)。但简短的回答是在二进制文件上使用/usr/bin/strings 并寻找可能的候选人。
  • 谢谢!这适用于提取 Xcode_9.4.1.xip
  • @GeoffNixon 我只使用了strings,在可打印的字符串中没有提到-x
  • @HappyFace 你说得对,x 标志在使用 strings 自身的输出中不再明显。我相信这是从 Xcode 10 开始的。也许 Apple 已经开始更彻底地剥离他们的二进制文件,或者可能是故意混淆。但是,对于 Darwin 的代码可用部分,也可以在此处找到这些选项:opensource.apple.com/source/cctools/cctools-886/misc/…(参见第 205 行)。通过这种方式可以找到许多其他带有隐藏选项的实用程序。
【解决方案2】:

我建议简单地将存档解压缩到您想要尝试以下操作的文件夹中:

xar -xf file.xip -C /path/to/target

(和/或)

tar -zxvf file.xip -C /path/to/target

xartar 命令以原始格式提取 .xip“内容”和“元数据”。

使用pbzx 流解析器,您需要提取作为lzma 压缩有效负载的“内容”;该格式类似于包安装程序中的格式(例如.pkg)。您可以compile the pbzx source from heredownload the compiled binary 并安装到/usr/local/bin 然后调用pbzx 命令:

pbzx -n Content | cpio -i

在命令完成内容解析后,您应该得到 .xip 存档中的任何内容的原始形式。

有用/附加信息

$ pkgutil --check-signature file.xip 

Xcode_9_beta_2.xip 返回:

Package "Xcode_9_beta_2.xip":
   Status: signed Apple Software
   Certificate Chain:
    1. Software Update
       SHA1 fingerprint: 1E 34 E3 91 C6 44 37 DD 24 BE 57 B1 66 7B 2F DA 09 76 E1 FD
       -----------------------------------------------------------------------------
    2. Apple Software Update Certification Authority
       SHA1 fingerprint: FA 02 79 0F CE 9D 93 00 89 C8 C2 51 0B BC 50 B4 85 8E 6F BF
       -----------------------------------------------------------------------------
    3. Apple Root CA
       SHA1 fingerprint: 61 1E 5B 66 2C 59 3A 08 FF 58 D1 4A E2 24 52 D1 98 DF 6C 60

注意事项

重要提示:从 macOS Sierra 开始,只有 XIP 存档由 苹果将​​扩大。一直在使用 XIP 存档的开发人员 将需要转而使用签名的安装程序包或磁盘映像。

OS X manual page : xip

【讨论】:

  • 我收到一个错误:Archive: Xcode_8.1.xip End-of-central-directory signature not found. Either this file is not a zipfile, or it constitutes one disk of a multi-part archive. In the latter case the central directory and zipfile comment will be found on the last disk(s) of this archive. note: Xcode_8.1.xip may be a plain executable, not an archive
  • 双击文件会发生什么?
  • 它会打开默认的存档实用程序来验证签名并提取。但是,在完成验证之前出现错误。
  • 那我认为文件损坏了。
  • 请注意,在您引用的手册页中未记录,-x 实用程序有一个简单的-x 选项(请参阅我的替代答案)。但这并不能验证签名,我认为您的“有用/附加信息”位是验证它的唯一实用方法。所以也许最好的答案是pkgutil --verify-signature [xip file] && xip -x [xip file]
【解决方案3】:

您可以打开存档实用程序本身,进入首选项并设置特定的目标文件夹,然后双击该文件。通过这种方式,您可以将其扩展到特定目的地。 ;-)

【讨论】:

  • 我觉得这个解决方案更安全。请注意,实际上应该进入“首选项”:)
【解决方案4】:

您可以通过打开存档实用程序(通过聚光灯搜索或启动板)来更改输出。然后存档实用程序>首选项(Command+,)。然后保存展开的文件> into...,你就可以改变输出目录了。 :)

更简单:打开“存档实用程序”并打开其首选项并更改可以将文件提取到的位置。此外,存档实用程序可以打开 .xip 文件。

【讨论】:

  • 可惜它没有“保存扩展文件”的“提示文件夹”选项
【解决方案5】:

到目前为止,似乎没有单一的工具可以做到这一点。需要一种可以解码pbzx 流的工具,而macOS 上似乎没有预装的工具。

在这些答案中可以找到各种解决方案:

【讨论】:

    【解决方案6】:

    (对于具有有效签名的存档。)

    从目标文件夹中,创建一个指向 .xip 存档的符号链接,然后使用该链接展开(完成后删除该链接)。示例:

    cd /Applications
    ln -s /Volumes/SomewhereElse/Xcode.xip
    xip --expand Xcode.xip
    rm Xcode.xip
    

    【讨论】:

      猜你喜欢
      • 2017-03-17
      • 2016-01-20
      • 2012-02-02
      • 2014-12-08
      • 2012-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多