Comprima archivos mientras lee datos de STDIN

127

¿Es posible comprimir (crear un archivo comprimido) datos mientras se lee desde stdin en Linux?

Espacio
fuente
Estoy votando para cerrar esta pregunta como fuera de tema porque pertenece a Unix y Linux
Dan Dascalescu

Respuestas:

180

Sí, usa gzip para esto. La mejor manera es leer los datos como entrada y redirigir el archivo comprimido a la salida, es decir

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

cat test.csvenviará los datos como stdout y usando pipe-sign gzip leerá esos datos como stdin. Asegúrese de redirigir la salida de gzip a algún archivo ya que los datos comprimidos no se escribirán en el terminal.

Espacio
fuente
44
Tenga en cuenta que los archivos test.csv.gz permanecen de tamaño 0 hasta que se cierra el flujo de datos.
MUY Bélgica
... y cómo se hace eso? ¿Es realmente una pregunta separada?
russellpierce
9
Esto también funciona con xz:mysqldump mydb | xz > dbdump.sql.xz
jeroen
1
Podría usar -9, el nivel de compresión predeterminado es -6.
Pablo A
110

Sí, gzipte dejaré hacer esto. Si simplemente ejecuta gzip > foo.gz, comprimirá STDIN en el archivo foo.gz. También puede canalizar datos en él, como some_command | gzip > foo.gz.

jtbandes
fuente
1

gzip > stdin.gz¿quizás? De lo contrario, debe desarrollar su pregunta.

retroceder
fuente