因此,我所知道的所有工具都将deflate算法流压缩为某种文件格式,包括标题,文件名,附加校验和等。
是否可以直接创建一个只包含deflate压缩流的文件,如RFC-1951中所述,使用一些标准的Linux工具+ bash?
答案 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 file
或gzip < file
将在stdout上生成一个带有10字节标头和8字节预告片的deflate流。您可以使用dd
删除标题和预告片,但是您需要查看输出的大小,以便为dd
提供正确的值以减少结束。
答案 2 :(得分:1)
稍微好一点的解决方案(无需写入临时文件)将是:
cat something | gzip --no-name | tail --bytes=+11 | head --bytes=-8 > gzip-without-anything