2011-09-24 24 views
7

¿Es posible comprimir/descomprimir una cadena en bash usando stdin/stdout?(Un/De) comprimir una cadena en bash?

Intenté esto pero aparentemente no es compatible?

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 

No estoy muy versado en linux pero he leído otras páginas utilidades de compresión hombre y no podía encontrar una solución?

Respuesta

5

Al hacer:

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

No tienes mismos mismas Bytes variables hey y cuando tenga en /tmp/myfile creado por:

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

que se obtiene "gzip: stdin es un multi "error de archivo gzip parcial - no compatible" simplemente porque tiene datos comprimidos rotos que no se pueden descomprimir.

La construcción VAR=$(...) está diseñada para trabajar con texto. Esta es la razón por la que tiene un borde trasero adicional, por ejemplo.

6

Si la pérdida de velocidad de compresión de 33% es aceptable para usted, entonces puede almacenar base64 codificado de datos comprimidos:

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 

va a trabajar, pero cada 3 (comprimido) bytes se almacenarán en 4 bytes de texto .

+6

El uso adecuado de 'base64' al comprimir sería' base64 -w0'. De lo contrario, las nuevas líneas se agregan a la salida. – JohnEye

Cuestiones relacionadas