从标准输入中提取时让 tar 自动检测压缩类型

jam*_*mes 17 linux compression tar

我使用 GNU tar。它可以在压缩/解压缩文件时自动检测压缩类型。但是我需要从 stdin 解压缩存档,并且压缩类型未知。我注意到 tar 可以给我正确的建议,例如:

tar: Archive is compressed. Use -z option
Run Code Online (Sandbox Code Playgroud)

但我希望 tar自动使用该压缩选项,而无需我输入该参数。我怎样才能做到这一点?为什么 tar 不直接解压,因为它已经知道压缩类型了?

谢谢!

Kev*_*nko 10

这不是您想听到的答案,但是根据其手册,GNU tar 不支持此答案:

在读取存档时必须指定解压缩选项的唯一情况是从管道或不支持随机访问的磁带驱动器读取。但是,在这种情况下,GNU tar 将指示您应该使用哪个选项。例如:

$ cat archive.tar.gz | tar tf -
tar: Archive is compressed.  Use -z option
tar: Error is not recoverable: exiting now
Run Code Online (Sandbox Code Playgroud)

如果您看到此类诊断信息,只需将建议的选项添加到 GNU tar 的调用中:

$ cat archive.tar.gz | tar tzf -
Run Code Online (Sandbox Code Playgroud)

-- 8.1.1 创建和读取压缩档案

  • 请注意,这适用于 OSX 上的 tar 命令,但不适用于使用 GNU tar 的 Linux。所以这_可以_修复。 (2认同)

jam*_*mes 8

最后,我意识到我不能让 tar 检测并从 stdin 解压缩存档的原因是我使用了 GNU tar。BSD tar 可以毫无问题地自动完成。所以我决定现在在我的脚本中使用 bsdtar 而不是 tar。