我在Macbook Air(OS X 10.10.5)上通过自制软件安装了pigz,以获得更好的压缩/解压缩性能。
要压缩,我使用tar --use-compress-program=pigz -cf test.tgz test
并且没关系。
但要解压缩的命令,tar --use-compress-program=pigz -xf test.tgz
输出错误:
tar: Unrecognized archive format
tar: Error exit delayed from previous errors.
或者有时输出:
tar: Unrecognized archive format
pigz: abort: write error on <stdout> (Broken pipe)
tar: Child process exited with status 32
tar: Error exit delayed from previous errors.
我读了manual of tar,并且不知道为什么它不起作用。
我注意到即使tar --use-compress-program=gzip -xf test.tgz
也会产生相同的错误。那么这是OSX的tar实现的错误吗?
注意:我知道管道样式pigz -d test.tgz | tar -xf
有效,在这种情况下我也可以使用调用内置gzip的tar -xf test.tgz
。但我只想确认它是否是一个错误。
答案 0 :(得分:2)
该程序按设计工作:其命令行中没有规定传递使用gzip
进行解压缩所需的选项。您应该使用包装的gzcat
,例如
tar --use-compress-program gzip -cf foo.compressed foo
tar --use-compress-program gzcat -tf foo.compressed
快速检查表明这不起作用:
tar --use-compress-program 'gzip -d' -tf foo.compress
虽然这可能会改变一些时间(这是可行的,但没有完成)。
根据pigz的manual page,它有unpigz
,这是你可以用于那个程序。
答案 1 :(得分:0)
这是BSD tar和GNU tar之间的问题。
我通过从自制软件安装gnu-tar
并将其放置在路径上来解决此问题。
在超级用户上看到以下类似问题:https://superuser.com/questions/318809/linux-os-x-tar-incompatibility-tarballs-created-on-os-x-give-errors-when-unt
答案 2 :(得分:-1)
在linux上我将gzip重命名为gzip.sav并与pigz建立了一个软链接,因此tar,dolphin,yum以及任何其他调用gzip的程序实际上都称为pigz