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

あなたがない:

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

あなたが「GZIPを取得する:あなたが/tmp/myfileにによって作成されているよう

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

あなたは、変数heyに同じ同じバイトを持っていないSTDINは、マルチです-part gzip file - not supported "というエラーは、解凍できない圧縮データが壊れているためです。

VAR=$(...)構成は、テキストを操作するために設計されています。これは、例えば余分な後縁を得る理由です。あなたのために、あなたは、符号化された圧縮データをBASE64を格納することができる

6

33%の圧縮率の損失が許容可能である場合:

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'の適切な使い方は' base64 -w0'です。それ以外の場合は、改行が出力に追加されます。 – JohnEye

関連する問題