comando tail não exibe a última linha

comando tail não exibe a última linha

Estou usando o seguinte comando para ler a última linha sempre que o arquivo é alterado.

tail -f -n1 Entrie.txt

Acontece que a primeira linha escrita mostra sem problemas, mas depois quando escrevo a segunda gera o seguinte erro

tail: Entrie.txt: file truncated

Após mostrar esse erro, ele mostra todos os valores escritos no arquivo. Mas não é só isso, depois de escrever muitas linhas o erro para de aparecer e é corrigido, mas preciso que funcione sempre bem.

Estou executando este comando no Linux.

Estou adicionando linhas ao arquivo em um editor e salvando.

Responder1

Você pode modificar o arquivo escrevendo uma nova versão ou anexando dados à versão atual.

Exemplo em shell:

  • date > sample_file.txt- recria arquivo com novo texto (saída do datecomando)
  • date >> sample_file.txt- acrescenta texto ao arquivo atual

Primeiro cenário - seu arquivo foi truncado (conteúdo excluído e recriado, isso pode ser feito com simples "gravação" no editor de texto) e tailavisa sobre isso. Segundo caso - tailfunciona como pretendido.

Responder2

Quando um editor de texto salva um arquivo, o que muitas vezes acontece é que ele salva em um arquivotemporárioarquivo, esvazia (trunca) o arquivo original e copia o conteúdo do arquivo temporário para o arquivo original. Isso é feito para não alterar as permissões, propriedade e outros metadados do arquivo original.

Isso significa que na perspectiva de tail, o arquivo é truncado (esvaziado), então ele passa a mostrar a última linha do arquivoenquanto o editor está reescrevendo(é por isso que exibe o arquivo inteiro).

Para adicionar linhas ao arquivo de forma que seu tailcomando sempre mostre apenas a última linha do arquivo e nada mais, você terá que certificar-se deacrescentarlinhas para o arquivo. Como os editores de texto geralmentereescreverarquivo, talvez seja necessário fazer isso usando outros meios.

Uma maneira muito básica de anexar dados a um arquivo é usar cat:

cat >>Entrie.txt

Isso faria com que fosse catanexado ao arquivo Entrie.txt. Ele aguardaria sua entrada e você poderia digitar diretamente no arquivo do terminal. A linha atual é escrita no final do arquivo assim que você pressiona Enter. Para parar de inserir dados, pressione Ctrl+Duma linha vazia.

Obviamente, isso não lhe dá nenhuma oportunidade de corrigir o que escreveu nas linhas anteriores depois de pressionar Enter.

Outra alternativa seria editar as novas linhas em um arquivo separado, digamos additions.txt, com o seu editor. Salve esse arquivo e faça

cat additions.txt >>Entrie.txt

Isso adicionaria todo o conteúdo additions.txtao final do arquivo Entrie.txt.

informação relacionada