(Un/De)compress a string in bash?

前端 未结 2 1088
独厮守ぢ
独厮守ぢ 2021-02-20 12:41

Is it possible to compress/decompress a string in bash using stdin/stdout ?

I tried this but apparently it is not supported ?



        
相关标签:
2条回答
  • 2021-02-20 13:07

    When you do:

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

    You don't have same same bytes in variable hey as you have in /tmp/myfile created by:

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

    You get "gzip: stdin is a multi-part gzip file -- not supported" error simply because you have broken compressed data which cannot be uncompressed.

    The VAR=$(...) construction is designed for working with text. This is why you get extra trailing trim for example.

    0 讨论(0)
  • 2021-02-20 13:16

    If 33% compression rate loss is acceptable for you, then you can store base64 encoded compressed data:

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

    It will work, but each 3 (compressed) bytes will be stored in 4 bytes of text.

    0 讨论(0)
提交回复
热议问题