Kompresuj pliki podczas odczytywania danych z STDIN

127

Czy można skompresować (utworzyć skompresowane archiwum) dane podczas odczytu ze stdin w systemie Linux?

Przestrzeń
źródło
Głosuję za zamknięciem tego pytania jako
niezwiązanego

Odpowiedzi:

180

Tak, użyj do tego programu gzip. Najlepszym sposobem jest odczytanie danych jako danych wejściowych i przekierowanie skompresowanego pliku do pliku wyjściowego, tj

cat test.csv | gzip > test.csv.gz

cat test.csvwyśle ​​dane jako standardowe wyjście i używając potoku znak gzip odczyta te dane jako standardowe wejście. Upewnij się, że przekierowujesz wyjście gzip do jakiegoś pliku, ponieważ skompresowane dane nie zostaną zapisane na terminalu.

Przestrzeń
źródło
4
Zwróć uwagę, że pliki test.csv.gz mają rozmiar 0, dopóki strumień danych nie zostanie zamknięty.
MUY Belgium
... a jak to się robi? Czy to naprawdę osobne pytanie?
russellpierce
9
Działa to również z xz:mysqldump mydb | xz > dbdump.sql.xz
jeroen
1
Można użyć -9, domyślny poziom kompresji to -6.
Pablo A
110

Tak, gzippozwolę ci to zrobić. Jeśli po prostu uruchomisz gzip > foo.gz, skompresuje STDIN do pliku foo.gz. Możesz również przesłać do niego dane, na przykład some_command | gzip > foo.gz.

jtbandes
źródło
1

gzip > stdin.gzbyć może? W przeciwnym razie musisz uściślić swoje pytanie.

wsteczny
źródło