如何在Linux中从文件创建裸露的deflate流?

时间:2014-11-21 16:37:17

标签: linux bash zip gzip

因此,我所知道的所有工具都将deflate算法流压缩为某种文件格式,包括标题,文件名,附加校验和等。

是否可以直接创建一个只包含deflate压缩流的文件,如RFC-1951中所述,使用一些标准的Linux工具+ bash?

3 个答案:

答案 0 :(得分:4)

我见过一些可以做到这一点的开发工具,但是使用普通工具它不是(立即)可能的,因为原始压缩流通常是无用的。

否则,在Linux上,gzip --no-name会产生压缩流,其标头大小为10个字节。您可以使用dd修剪它。例如:

cat something | gzip --no-name | \
  ( dd of=/dev/null bs=1 count=10; cat > gzip-without-header )

剩下的就是从输出文件中删除最后8个字节(CRC,未压缩的大小):

dd if=gzip-without-header of=gzip-without-anything \
    bs=1 count=$[ `stat -c '%s' gzip-without-header` - 8 ]

P.S。 GZip文件格式在RFC1952中定义。

答案 1 :(得分:1)

gzip -nc filegzip < file将在stdout上生成一个带有10字节标头和8字节预告片的deflate流。您可以使用dd删除标题和预告片,但是您需要查看输出的大小,以便为dd提供正确的值以减少结束。

答案 2 :(得分:1)

稍微好一点的解决方案(无需写入临时文件)将是:

cat something | gzip --no-name | tail --bytes=+11 | head --bytes=-8 > gzip-without-anything