
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 dodate
comando)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 tail
avisa sobre isso. Segundo caso - tail
funciona 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 tail
comando 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 cat
anexado 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.txt
ao final do arquivo Entrie.txt
.