2011-09-24 74 views
7

是否可以使用stdin/stdout在bash中压缩/解压缩字符串?(Un/De)在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,但我读了其他压缩实用程序手册页并找不到解决方案?

回答

5

当你这样做:

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

您不必在可变hey相同的相同字节你/tmp/myfile必须用创建人:

echo "hello world" | gzip -cf > /tmp/myfile 

你得到“压缩程序:标准输入是一个多部分gzip文件 - 不支持“的错误,因为你破坏了压缩的数据,这些数据不能被解压缩。

VAR=$(...)建筑设计与文字工作。这就是为什么你会得到额外的拖尾修剪。

6

如果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个字节的文本。

+6

压缩将是'的base64 -w0'时base64'的'的正确使用。否则,换行符将被添加到输出中。 – JohnEye