menos con "archivo de actualización" como funcionalidad


9

Quiero ver un archivo que se sobrescribe cada 5 minutos con less. ¿Cómo puedo hacer que lesssiga el nuevo descriptor de archivo en lugar de mantener el antiguo visualizador? watch "cat file"no lo hará porque el archivo es demasiado largo para caber en una ventana de terminal.


2
"Seguir" implica seguir el final del archivo. Es posible que desee aclarar que su archivo se sobrescribe y está interesado en volver a abrirlo.
chutz el

Me refería a seguir el descriptor de archivo, tal como se define en tail -fla página de manual de. Pero, sin embargo, he aclarado mi pregunta.
d135-1r43

Respuestas:


10

Puede obtener este efecto emitiendo el Fcomando ( Shift+F) mientras visualiza el archivo less. Para dejar de seguir y volver a la paginación, presioneCtrl+C

Dado que su archivo solo cambia cada 5 minutos, también puede usar tail -fy especificar un tiempo de suspensión más prolongado con -s(predeterminado a 1 segundo). Por ejemplo,

tail -f -s 60 myfile

comprueba la myfilesalida cada 60 segundos.

EDITAR: Debido a una pregunta engañosa, la respuesta anterior no fue satisfactoria. El segundo intento sigue:

Para volver a abrir el mismo archivo lesscada 5 minutos, intente esto:

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

Esto generará una subshell que procesa otro proceso de shell instruido para matar su proceso padre después de 5 minutos. Luego abre el archivo con less. Cuando el comando de shell en segundo plano mata al subshell primario, mata a todos sus hijos, incluido el comando "menos". Entonces el ciclo comienza el proceso nuevamente.

La única manera fácil que conozco para matar esto es matar el terminal en el que se encuentra su shell original. Si eso es inaceptable, puede usar el truco "killfile":

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

Para dejar de hacerlo stuff, rmel killfile en otro shell.


Esto es solo parcialmente útil para mi caso. El archivo visto es muy grande, la información actualizada en la parte superior. No es un archivo de registro de "desplazamiento". Shift + F se desplaza inmediatamente al final del archivo ...
d135-1r43

Debes editar tu pregunta para aclararla. También edité mi respuesta para responder esto.
bonsaiviking

watch -n 1 less <filename>
axel22

1

Puedes hacer algo similar en vim.

Inicie una sesión de servidor de vim:

vim -R --servername refresh_session

Luego, en otra consola, monitoree las actualizaciones del archivo y dígale a la sesión de vim que vuelva a cargar el archivo tan pronto como se actualice:

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

Unas pocas trampas.

  • Por supuesto, esto no funcionará si vimno está compilado con la clientserverfunción en.
  • inoifywaitdejará de funcionar cuando el archivo se elimine. Así que espero que tu archivo se sobrescriba. Es posible solucionar eso también, por supuesto.

Y si desea tener una lessexperiencia más parecida, puede usar las lessmacros para obtener sus lessasociaciones de teclas vim.

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

0

Encontré un viejo, pero muy bueno "menos" como programa (un "localizador"). Tiene un comando "R" que actualiza el archivo.

Se llama "lv" . Puedes instalarlo en Ubuntu usando:

sudo apt install lv

Sin embargo, parece no tener la función de autocarga.



-1

Tail es tu amigo. "tail -f filename" le mostrará nuevas líneas cuando aparezcan.

O si está buscando cambios realizados en el medio del archivo, ¿tal vez ejecute un script cada pocos minutos para hacer una copia del archivo en una ubicación temporal y hacer una diferencia en él?


Estaba bastante claro, incluso en la publicación original, que había un "nuevo archivo". Por lo tanto, el descriptor de archivo habría cambiado pero tail -faún leería el anterior.
Alastair Irvine

No creo que sea muy justo. Para ser claros como el cristal, debemos mirar la publicación original sin editar, porque si miras la fecha de mi respuesta, esa es la pregunta que estaba respondiendo. En esa pregunta sin editar, mi respuesta tiene mucho sentido. serverfault.com/posts/445899/revisions
David W

Verifiqué las revisiones. Palabras clave "nuevo archivo".
Alastair Irvine
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.