2011-09-24 10 views
7

Czy można skompresować/rozpakować ciąg w bashu, używając stdin/stdout?(Un/De) skompresować ciąg w bash?

Próbowałem tego, ale najwyraźniej nie jest obsługiwane?

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 

Nie jestem dobrze zaznajomiony z linuxem, ale czytałem inne strony man narzędzia kompresji i nie mogłem znaleźć rozwiązania?

Odpowiedz

5

Kiedy zrobić:

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

Nie masz same same bajty w zmiennej hey jak masz w /tmp/myfile stworzony przez:

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

dostać „gzip: stdin jest multi -part gzip file - not supported "błąd po prostu z powodu złamania skompresowanych danych, których nie można rozpakować.

Konstrukcja VAR=$(...) jest przeznaczona do pracy z tekstem. Z tego powodu na przykład uzyskuje się dodatkowe trymowanie.

6

Jeśli 33% straty szybkość kompresji jest dopuszczalne ty, można przechowywać base64 zakodowane dane skompresowane:

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 

będzie działać, lecz co 3 (sprężonego) bajtów będzie przechowywana w 4 bajtów tekstu .

+6

Właściwym użyciem 'base64' podczas kompresji będzie" base64 -w0 ". W przeciwnym razie do wyjścia dodawane są nowe linie. – JohnEye

Powiązane problemy