tail -9999f
fará algo próximo do que você deseja. Adicione mais 9s se o seu arquivo for maior.
Problemas:
- Arquivos binários podem não ter caracteres de nova linha.
tail -f
esperará por uma nova linha antes de imprimir qualquer coisa. - A versão de
tail
no Solaris (você não mencionou qual Solaris, mas provavelmente não importa) provavelmente não suporta essa opção. Pode suportartail -n 9999 -f
. Você pode ter que adquirir a versão GNU da cauda. - Como o arquivo está em constante crescimento, existe uma condição de corrida entre descobrir o quão grande é e iniciar o processo final. Você pode perder o início do arquivo se não pedir linhas suficientes.
-
tail
não saberá quando você realmente terminou de gravar no arquivo, portanto, o processogzip
nunca terminará. Não tenho certeza do que acontecerá quando vocêctrl-c
terminar o processotail
, mas é provável que o gzip limpe depois de si mesmo e remova o arquivo em que estava trabalhando.
Minha sugestão seria iniciar o programa original e canalizar a saída para o gzip assim:
./my_program | gunzip > new_file.txt
Dessa forma, o gunzip esperará se my_program
estiver lento, mas ainda terminará quando o verdadeiro final do arquivo for indicado por my_program
acabamento.
Você pode precisar reescrever seu programa para gravar em STDOUT em vez de diretamente em um arquivo.
Editar:
Depois de dar uma olhada na página do manual , três dos problemas acima podem ser resolvidos. Usar a opção -c <bytes>
em vez de -n <lines>
atenua o problema 1. Usar -n +0
ou -c +0
atenua o problema 3. O uso de --pid=<PID>
terminará quando o programa original (em execução como <PID>
) terminar, o que atenua o problema 4.