2011-09-24 66 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