使用一个命令解压 .txz 和 .tar 中的压缩文件

Paw*_*ski 17 shell tar compression

我有一个以 *.txz 格式压缩的文件。解压后,我收到了一个 *.tar 文件。有没有办法用一个命令将它解压两次?我的意思是用一个命令解压文件 (*.tar).txz?

知道我是这样做的:

xz -d file.txz
tar xvf file.tar
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有更好的方法。

Sté*_*las 22

xz -d < file.tar.xz | tar xvf -
Run Code Online (Sandbox Code Playgroud)

这与任何压缩存档相同。您永远不必创建原始文件的未压缩副本。

一些tar实现,如最新版本的 GNU,tar有内置选项可以xz自行调用。

使用 GNUtarbsdtar

tar Jxvf file.tar.xz
Run Code Online (Sandbox Code Playgroud)

但是,如果您有一个具有 的版本,-J它很可能会xz自动检测文件,因此:

tar xvf file.tar.xz
Run Code Online (Sandbox Code Playgroud)

就足够了。

如果您的 GNU 或 BSDtar太旧而无法xz专门支持,您可以使用以下--use-compress-program选项:

tar --use-compress-program=xz -xvf file.tar.gz
Run Code Online (Sandbox Code Playgroud)

tar调用压缩器实用程序的优点之一是它能够在退出状态报告它的故障。

注意:如果tar.xz存档是用pixz,pixz可能已经添加了一个tar索引,它允许单独提取文件而无需解压缩整个存档:

pixz -x path/to/file/in/archive < file.tar.xz | tar xvf -
Run Code Online (Sandbox Code Playgroud)


UVV*_*UVV 7

这应该是要走的路 tar Jxvf file.txz


Ant*_*hon 5

拆包可能不是正确的术语。您可以解压缩xz解压tar

GNU 的手册页tarman tarDebian 上默认使用 GNU tar)指定您可以使用:

-I, --use-compress-program PROG
      filter through PROG (must accept -d)
Run Code Online (Sandbox Code Playgroud)

xz支持该-d选项,因此您可以使用:

tar --use-compress-program xz xvf file.txz 
Run Code Online (Sandbox Code Playgroud)

手册页中不太清楚的是-xzand-J--use-compress-program xzor 的简写-I xz

手册页中根本没有指定的是你可以做的

tar xvf file.txz 
Run Code Online (Sandbox Code Playgroud)

在 GNU tar 中,它会将 tar 文件识别为使用xz.