Menos tem um recurso como tail --follow = name (-F)

41

O comando lesspode ser usado para substituir tailem

tail -f file

para fornecer recursos como lidar com saída binária e navegar pela rolagem:

less +F file

O +prefixo significa "fingir que digito isso após a inicialização" e a chave Fcomeça a seguir.

Mas lesstambém pode substituir

tail --follow=name file

que segue filemesmo que o arquivo real seja excluído ou movido, como um arquivo de log movido para file.log.1e, em seguida, um novo arquivo seja criado com o mesmo nome que o arquivo a seguir?

Volker Siegel
fonte
11
Você pode tentar com less --follow-nameouless --follow-name +F
don_crissti 14/04/2015
@don_crissti Bom ... less --follow-name +Fé isso - não faço ideia de como eu perdi isso - eu tinha certeza que procurei na página de manual follow... estranho. Faça disso uma resposta!
Volker Siegel
Bem, mais algumas pesquisas revelam que já foram feitas e respondidas aqui, então deixarei como comentário. Você sempre pode votar a resposta lá.
don_crissti
@don_crissti Certo ... exceto que sua resposta correta não foi encontrada lá - --follow-nameé descrita, mas +Fnunca é mencionada, e eu acho que é muito importante porque não é amplamente conhecida obviamente.
Volker Siegel
Se você veio aqui por causa de uma pesquisa no Google less follow, LEIA A PERGUNTA. Ele já responde como fazer lessalterações nos arquivos a seguir!
Hubert Grzeskowiak 15/08

Respostas:

40

Sim, lesspode seguir pelo nome do arquivo

O recurso tem uma sintaxe bastante obscura:

less --follow-name +F file.log

Com menos, --follow-nameé diferente da tailopção --follow=name.
Ele não lesssegue o arquivo, mas modifica o comportamento da chave de comando Fdentro de less para seguir com base no nome do arquivo, não no descritor do arquivo.

Além disso, não há opção normal para iniciar lessno modo de acompanhamento.
Mas você pode usar a linha de comando para fornecer pressionamentos de teclas a serem executados após a inicialização, prefixando-os com +.
Combinar a opção de modificador com +F, lessrealmente iniciará no modo de acompanhamento (modificado).

Use +Fsozinho o equivalente a plain tail -f:

less +F file.log
Volker Siegel
fonte
Eu suspeito que, se você seguir um fluxo infinito com menos, isso acabará esgotando sua memória porque, ao contrário de tail -f, a quantidade de memória usada não é limitada pelo limite de rolagem do terminal (a menos que o limite de rolagem do terminal também seja infinito). menos + F precisa preservar todo o histórico de rolagem e não pode confiar em recarregar fatias de um arquivo no disco rígido.
CMCDragonkai
@CMCDragonkai Ponto interessante. lesspossui opções para controlar o tamanho do buffer usado por arquivo ( -be -B), não é óbvio para mim se o tamanho é limitado por padrão.
Volker Siegel
A página do manual -Bdiz que "Por padrão, quando os dados são lidos a partir de um canal, os buffers são alocados automaticamente conforme necessário. Se uma grande quantidade de dados for lida no canal, isso poderá causar uma grande quantidade de memória. A opção -B desativa essa alocação automática de buffers para pipes, de modo que apenas 64 K (ou a quantidade de espaço especificada pela opção -b) seja usada para o pipe. ". Isso significa que, ao ler de um canal infinito, a memória infinita é alocada por padrão, mas se estiver lendo um arquivo como um arquivo de log, as fatias de 64 K serão usadas por padrão.
CMCDragonkai # 10/17
4

No Fedora, pelo menos, menos tem uma opção + F que segue o conteúdo de um arquivo, assim como o tail -f.

Atualize, tente pressionar F em menos para alternar para o modo seguinte

user1529413
fonte
Você tem certeza? Minha menos tem uma opção conflitantes o mesmo nome, -F: A página homem de menos diz: -F or --quit-if-one-screen. Qual versão lessvocê possui? A minha diz less 458com a opção -V.
Volker Siegel
Muito interessante, obrigado pelo link! Isso parece não ser um gnu menos. A primeira linha completa de less -Vé less 458 (GNU regular expressions). Por favor me dê sua versão.
Volker Siegel
Sim, eu tenho certeza, mas vá em frente e para baixo voto mim, Stackexchange precisa compartilhar o amor
user1529413
11
Só para ter certeza de que você achou que eu votei contra você: Não, eu votei em você.
Volker Siegel