我使用 GNU tar。它可以在压缩/解压缩文件时自动检测压缩类型。但我需要从 stdin 解压缩存档,而压缩类型未知。我注意到 tar 可以给我正确的建议,例如:
tar: Archive is compressed. Use -z option
但我希望 tar 使用该压缩选项自动地而不要求我输入该参数。我该怎么做?既然 tar 已经知道压缩类型,为什么不直接解压缩呢?
谢谢你!
答案1
这不是您想听到的答案,但是根据 GNU tar 手册,它不支持此功能:
读取档案时必须指定解压缩选项的唯一情况是从管道或不支持随机访问的磁带驱动器读取时。但是,在这种情况下,GNU tar 将指示您应该使用哪个选项。例如:
$ cat archive.tar.gz | tar tf - tar: Archive is compressed. Use -z option tar: Error is not recoverable: exiting now
如果您看到这样的诊断,只需将建议的选项添加到 GNU tar 的调用中:
$ cat archive.tar.gz | tar tzf -
答案2
最后,我意识到无法让 tar 从 stdin 检测和解压档案的原因是我使用了 GNU tar。BSD tar 可以自动完成此操作,没有任何问题。所以我决定现在在脚本中使用 bsdtar 而不是 tar。