J'ai un travail sur un système batch qui fonctionne extrêmement longtemps et produit des tonnes de sortie. Tellement en fait que je dois diriger la sortie standard via gzip pour empêcher le nœud de lot de remplir sa zone de travail et de se planter par la suite.
longscript | gzip -9 > log.gz
Maintenant, je voudrais étudier la sortie du travail alors qu'il est toujours en cours d'exécution. Alors je fais ça:
gunzip log.gz
Cela fonctionne très longtemps, car il s'agit d'un fichier énorme (plusieurs Go). Je peux voir le fichier de sortie en cours de création et le regarder lors de sa construction.
tail log
> some-line-of-the-log-file
tail log
> some-other-line-of-the-log-file
Cependant, en fin de compte, gzip rencontre la fin du fichier gzippé. Étant donné que le travail est toujours en cours d'exécution et que gzip écrit toujours le fichier, il n'y a pas encore de pied de page approprié, donc cela se produit:
gzip: log.gz: unexpected end of file
Après cela, le fichier journal extrait est supprimé, car gzip pense que les données extraites corrompues ne sont d'aucune utilité pour moi. Cependant, je ne suis pas d'accord - même si les deux dernières lignes sont brouillées, la sortie est toujours très intéressante pour moi.
Comment convaincre gzip de me laisser conserver le fichier "corrompu"?
gunzip -c
écrit la sortie sur stdout ... c'est peut-être ce que vous recherchez? Il conserve l'original inchangé.