2011-09-24 15 views
7

E 'possibile comprimere/decomprimere una stringa in bash usando stdin/stdout?(Un/De) comprime una stringa in bash?

Ho provato questo ma a quanto pare non è supportato?

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 

Io non sono esperto in linux ma ho letto altre pagine di compressione utility uomo e non sono riuscito a trovare una soluzione?

risposta

5

Quando si esegue:

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

Non devi stesse stesse byte variabile hey come si deve in /tmp/myfile creato da:

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

Si ottiene "gzip: stdin è un multi -part file gzip - non supportato "errore semplicemente perché hai rotto i dati compressi che non possono essere decompressi.

La costruzione VAR=$(...) è progettata per lavorare con il testo. Questo è il motivo per cui ottieni un trim finale aggiuntivo, ad esempio.

6

Se la perdita di compressione 33% è accettabile per te, allora è possibile memorizzare base64 dati codificati compressi:

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 

che possa funzionare, ma ogni 3 (compressi) byte verrà memorizzato in 4 byte di testo .

+6

L'uso corretto di 'base64' durante la compressione sarebbe' base64 -w0'. In caso contrario, i newline vengono aggiunti all'output. – JohnEye