Tenho um programa que grava traces em disco e o tamanho fica muito grande. Normalmente, eu uso os seguintes comandos.
./run output.txt
xz output.txt
Posso canalizar xz ao mesmo tempo que output.txt está sendo escrito?
Eu li Como converter todos os arquivos de gzip para xz em tempo real (e recursivamente)? , mas não tenho certeza se se aplica ao meu caso.
Se o seu
./run
produzirá sua saída para stdout se não for fornecido um argumento de arquivo (o que é habitual no Unix/Linux), você pode simplesmente usar:Se ele precisar de um argumento de nome de arquivo, mas se for possível gravar em um pipe, você poderá usar um dispositivo especial como
/dev/stdout
ou/dev/fd/1
(ambos devem ser equivalentes), assim:Ou você pode usar a substituição de processo , que normalmente está disponível na maioria dos shells modernos, como bash, zsh ou ksh, que acabará usando um dispositivo
/dev/fd
nos bastidores para fazer o mesmo:Este último também precisa
./run
ser capaz de gravar em um pipe, mas deve funcionar melhor do que os outros se gravar./run
emoutput.txt
e stdout em sua operação normal, caso em que a saída seria misturada se você redirecionar ambos para stdout.Os programas geralmente são bons escrevendo em um pipe, mas alguns deles podem querer buscar e retroceder para deslocamentos dentro de um arquivo de saída, o que não é possível em um pipe. Se for esse o caso, escrever em um arquivo temporário e compactá-lo provavelmente é tudo o que você pode fazer.