(Un / De)用bash压缩字符串?

时间:2011-09-24 11:56:15

标签: linux bash compression gzip

是否可以使用stdin / stdout压缩/解压缩bash中的字符串?

我试过这个,但显然它不受支持?

hey=$(echo "hello world" | gzip -cf)
echo $hey # returns a compressed string
echo $hey | gzip -cfd
gzip: stdin is a multi-part gzip file -- not supported

我不熟悉linux,但是我读了其他压缩实用程序手册页,却找不到解决方案?

2 个答案:

答案 0 :(得分:11)

如果您可以接受33%的压缩率丢失,那么您可以存储base64编码的压缩数据:

me$mybox$ FOO=$(echo "Hello world" | gzip | base64) # compressed, base64 encoded data
me$mybox$ echo $FOO | base64 -d | gunzip # use base64 decoded, uncompressed data
Hello world

它会工作,但每个3(压缩)字节将存储在4个字节的文本中。

答案 1 :(得分:6)

当你这样做时:

hey=$(echo "hello world" | gzip -cf)

变量hey中的字节数与{1}}创建的字节数相同:

/tmp/myfile

你得到“gzip:stdin是一个多部分的gzip文件 - 不支持”错误只是因为你破坏了无法解压缩的压缩数据。

echo "hello world" | gzip -cf > /tmp/myfile 构造旨在处理文本。这就是你获得额外尾随修剪的原因。