某些软件似乎以新的存档格式分发:
$ file node-v18.7.0-linux-x64.tar.xz
node-v18.7.0-linux-x64.tar.xz: XZ compressed data
我如何提取它,最好使用 tar (就像我可以使用 gzip 或 bzip2 一样)?
答案1
几个tar
实现(至少 GNUtar
和star
libarchive bsdtar
)已经处理这种压缩格式,您可以:
不要显式指定格式,让 tar 自动检测压缩(使用 gtar²、bsdtar 或 star³):
tar -xf node-v18.7.0-linux-x64.tar.xz
或者,如果您想查看进度:
tar -xvf node-v18.7.0-linux-x64.tar.xz
-J
将/--xz
与 GNU 或 libarchive 或-xz
with 一起使用star
来告知tar
期待 XZtar -xJf node-v18.7.0-linux-x64.tar.xz
gtar -xJf node-v18.7.0-linux-x64.tar.xz
bsdtar -xJf node-v18.7.0-linux-x64.tar.xz
star -x -xz -f node-v18.7.0-linux-x64.tar.xz
如果没有这些特定的tar
实现或使用标准pax
命令(tar
已从 UNIX 标准中删除,因为实现之间存在太多不兼容性),请使用 ⁴ 解压缩存档xz
,然后通过管道解压存档:
xz -dc node-v18.7.0-linux-x64.tar.xz | tar -xvf -
xz -dc node-v18.7.0-linux-x64.tar.xz | pax -rv
1 通常tar
在 GNU 系统上调用,但如果安装在该系统旁边,通常gtar
也会在其他系统上gnutar
调用。gnu-tar
-
² 对于 GNU tar,如果文件作为文件名在 stdin 上传递,或者文件不可查找,在这种情况下您需要传递该选项,则该选项不起作用-J
。
³ 对于星号,如果文件不可查找,则不起作用,在这种情况下您确实需要使用该-xz
选项。tar -xf -
只要 stdin 是可查找的,就仍然有效。
xz
⁴ 请注意,在这种情况下,可能无法始终检测到故障。大多数类似 Bourne 的 shell 现在都支持pipefail
ksh93 中的选项,这可以在这里提供帮助;设置为set -o pipefail
.