tail: Lendo um arquivo inteiro e depois seguindo

35

Gostaria de um tail -ftipo de comportamento que leia o arquivo inteiro e continue a segui-lo conforme está escrito.


SOLUÇÃO

Com base na resposta que aceitei, isso funciona: tail -f -n +1 {filename}

Por que funciona: A -fopção continua "seguindo" o arquivo e produz novas linhas à medida que são gravadas no arquivo. As -n +1instruções tailpara começar a ler o arquivo da primeira linha. O uso -n -10começaria com as últimas dez linhas do arquivo.

Sonny
fonte
2
Este é um comentário, não uma pergunta. E cauda ainda não faz isso: tail -f -n 10000000000000000000provavelmente mostrará todas as linhas, não? (talvez o 10000000000000000000 é um pouco demais: =))
Rinzwind
Eu acredito que more fileNamefaria exatamente isso
ryekayo
1
no..more não adicionará linhas extras adicionadas ao arquivo após o início de mais.
Rinzwind
Presumivelmente, tail -f -n 100...será necessário pré-ler o arquivo para determinar o número de linhas, a menos que seja inteligente o suficiente para definir um limite superior para a contagem de linhas com base no tamanho do arquivo.
Mkfearnley # 15/18

Respostas:

51

Usar

tail -f -n +1

Usando man tailvocê fornecerá mais detalhes, o trecho relevante a seguir.

<snip>Numbers having a leading plus (`+') sign are relative to the
beginning of the input, for example, ``-n +2'' starts the display at the
second line of the input.</snip>

-f      The -f option causes tail to not stop when end of file is
        reached, but rather to wait for additional data to be appended to
        the input.  The -f option is ignored if the standard input is a
        pipe, but not if it is a FIFO.

-n number
        The location is number lines.
Timo Kluck
fonte
3
Você poderia adicionar esses "mais detalhes" à sua resposta? Explique por que e como sua solução funciona. (Encontrado sua resposta na fila de baixa posts de qualidade.)
kraxor
1
@kraxor Você pode encontrar os "mais detalhes" executando man tail(e lendo) como a resposta diz, ou faça uma pesquisa on-line por "página de manual da cauda" e leia um deles. tailfunciona iniciando em uma posição em um arquivo, lê (e exibe) até o fim e depois monitora o aumento do tamanho do arquivo. Quando o tamanho do arquivo aumenta, taillê e é exibido da antiga posição EOF para o novo final do arquivo.
waltinator
2
@waltinator Eu realmente não me perguntei. Pedi a ele para adicionar mais detalhes porque sua postagem foi sinalizada como de baixa qualidade, mas não queria votar para excluir porque ele deu uma resposta correta.
kraxor
1
Era exatamente isso que eu estava procurando. Eu usei o tail -50 {filename}anteriormente, mas não estava tendo sucesso combinando os dois.
Sonny
1
Em
seguida
3

Tente o seguinte:

watch tail {filename}

onde {filename}está o arquivo que você deseja acompanhar. Isso monitorará continuamente o comando em busca de alterações e emitirá as alterações para o stdout. É bem útil.

Rick Chatham
fonte
Parece uma ferramenta muito boa. Embora não tenha dado os resultados que eu estava procurando, eu definitivamente vou manter isso em mente. Combiná-lo com a resposta aceita é muito bom:watch tail -n +1 {filename}
Sonny
Sim, parece que você aperfeiçoou!
21414 Rick
watché realmente uma ferramenta útil, mas para observar a alteração da saída de um comando, mas para assistir ao final de um arquivo sendo anexado, é muito melhor usá-lo tail -f. --- watch tail {filename}reabrirá e relerá o final do arquivo a cada dois segundos. Por outro lado, tail -fobserva o crescimento do arquivo e, quando detectado, lê imediatamente apenas a parte anexada. tailf -fé muito mais eficiente e a reação é muito mais rápida. Além disso, ele mostrará continuamente o conteúdo do arquivo a partir do ponto em que você começou. --- watchsubstitui sua saída a cada dois segundos.
pabouk