menos com a funcionalidade de “atualização de arquivo”

9

Quero assistir a um arquivo que é substituído a cada 5 minutos less. Como posso lessseguir o novo descritor de arquivo em vez de manter o antigo exibido? watch "cat file"não o fará porque o arquivo é muito longo para caber em uma janela do terminal.

d135-1r43
fonte
2
"Seguir" implica seguir o final do arquivo. Convém esclarecer que seu arquivo foi substituído e você está interessado em reabri-lo.
chutz
Eu quis dizer seguir o descritor de arquivo, conforme definido na tail -fpágina do manual. No entanto, esclareci minha pergunta.
D135-1r43 07/11
Use less --follow-namesee unix.stackexchange.com/a/74287/112522
djsutho

Respostas:

10

Você pode obter esse efeito emitindo o Fcomando ( Shift+F) enquanto visualiza o arquivo less. Para parar de seguir e voltar à paginação, pressioneCtrl+C

Como o arquivo é alterado apenas a cada 5 minutos, você também pode usar tail -fe especificar um tempo de suspensão mais longo com -s(o padrão é 1 segundo). Por exemplo,

tail -f -s 60 myfile

verifica myfilea saída a cada 60 segundos.

EDIT: Devido a uma pergunta enganosa, a resposta acima foi insatisfatória. Segunda tentativa a seguir:

Para reabrir o mesmo arquivo a lesscada 5 minutos, tente o seguinte:

while true; do ( sh -c 'sleep 600 && kill $PPID' & less myfile ); done

Isso gerará um subshell que dá suporte a outro processo de shell instruído a interromper seu processo pai após 5 minutos. Em seguida, ele abre o arquivo com less. Quando o comando shell em segundo plano mata o subshell pai, ele mata todos os seus filhos, incluindo o comando "less". Em seguida, o loop inicia o processo novamente.

A única maneira fácil que conheço de matar isso é matar o terminal em que está seu shell original. Se isso é inaceitável, você pode usar o truque "killfile":

touch killfile
while [ -f killfile]; do stuff; done

Para parar de fazer stuff, rmo killfile em outro shell.

bonsaiviking
fonte
Isso é apenas parcialmente útil para o meu caso. O arquivo monitorado é muito grande, as informações atualizadas na parte superior. Não é um arquivo de log de "rolagem". Shift + F imediatamente rola ao final do arquivo ...
d135-1r43
Você deve editar sua pergunta para esclarecer. Também editei minha resposta para responder a isso.
BomDivirta-se em
watch -n 1 less <filename>
axel22
1

Você pode fazer algo semelhante em vim.

Inicie uma sessão do servidor de vim:

vim -R --servername refresh_session

Em outro console, monitore o arquivo para atualizações e diga à sessão do vim para recarregar o arquivo assim que ele for atualizado:

inotifywait -e close_write -m your_log_file | while read filename events; do
    vim --servername refresh_session --remote $filename
done

Algumas dicas.

  • Obviamente, isso não funcionará se você vimnão estiver compilado com o clientserverrecurso.
  • inoifywaitparará de funcionar quando o arquivo for excluído. Espero que seu arquivo seja substituído. É possível contornar isso também, é claro.

E se você quiser ter uma lessexperiência mais parecida, poderá usar as lessmacros para inserir suas lesscombinações de teclas vim.

/usr/share/vim/vim73/macros/less.sh --servername refresh_session
chutz
fonte
0

Encontrei um programa antigo, mas muito bom, "menos" (um "pager"). Ele possui um comando "R" que atualiza o arquivo.

É chamado "lv" , você pode instalá-lo no Ubuntu usando:

sudo apt install lv

No entanto, parece não ter nenhum recurso de carregamento automático.

Ronie
fonte
-1

Você pode tentar este comando: arquivo -f

FINESEC
fonte
-1

Tail é seu amigo. "tail -f filename" mostrará novas linhas quando elas aparecerem.

Ou, se você estiver procurando por alterações feitas no meio do arquivo, talvez execute um script a cada poucos minutos para fazer uma cópia do arquivo em um local temporário e fazer uma diferença nele?

David W
fonte
Ficou bem claro, mesmo no post original, que havia um "novo arquivo". Portanto, o descritor de arquivo teria mudado, mas tail -fcontinuaria lendo o antigo.
Alastair Irvine
Eu não acho isso muito justo. Para ser claro, precisamos olhar para o post original e não editado, porque se você olhar para a data da minha resposta, essa é a pergunta que eu estava respondendo. Nessa pergunta não editada, minha resposta faz todo sentido. serverfault.com/posts/445899/revisions
David W
Eu verifiquei as revisões. Palavras-chave "novo arquivo".
Alastair Irvine