Tengo un trabajo en un sistema por lotes que se ejecuta extremadamente largo y produce toneladas de salida. Tanto es así que tengo que canalizar la salida estándar a través de gzip para evitar que el nodo por lotes llene su área de trabajo y luego se bloquee.
longscript | gzip -9 > log.gz
Ahora, me gustaría investigar el resultado del trabajo mientras aún se está ejecutando. Entonces hago esto:
gunzip log.gz
Esto dura mucho tiempo, ya que es un archivo enorme (varios GB). Puedo ver el archivo de salida que se crea mientras se está ejecutando y puedo verlo mientras se está construyendo.
tail log
> some-line-of-the-log-file
tail log
> some-other-line-of-the-log-file
Sin embargo, en última instancia, gzip encuentra el final del archivo comprimido. Dado que el trabajo aún se está ejecutando y gzip todavía está escribiendo el archivo, todavía no hay un pie de página adecuado, por lo que sucede esto:
gzip: log.gz: unexpected end of file
Después de esto, el archivo de registro extraído se elimina, ya que gzip piensa que los datos extraídos corruptos no me sirven. Sin embargo, no estoy de acuerdo, incluso si las últimas dos líneas están codificadas, la salida sigue siendo muy interesante para mí.
¿Cómo puedo convencer a gzip para que me permita mantener el archivo "dañado"?
gunzip -c
escribe la salida en stdout ... tal vez eso es lo que estás buscando? Mantiene el original sin cambios.