tail: leyendo un archivo completo y luego siguiendo

35

Me gustaría un tail -ftipo de comportamiento que lea todo el archivo y luego lo siga tal como está escrito.


SOLUCIÓN

Según la respuesta que acepté, esto funciona: tail -f -n +1 {filename}

Por qué funciona: la -fopción continúa "seguir" el archivo y generar nuevas líneas a medida que se escriben en el archivo. Las -n +1instrucciones tailpara comenzar a leer el archivo desde la primera línea. El uso -n -10comenzaría con las últimas diez líneas del archivo.

Hijo
fuente
2
Este es un comentario, no una pregunta. Y la cola ya no hace eso: tail -f -n 10000000000000000000probablemente mostrará todas las líneas, ¿no? (tal vez el 10000000000000000000 es un poco demasiado: =))
Rinzwind
Creo more fileNameque haría exactamente eso
ryekayo
1
no..more no agregará líneas adicionales agregadas al archivo después de que se haya iniciado más.
Rinzwind
Presumiblemente tail -f -n 100...implicará una lectura previa del archivo para determinar el número de líneas, a menos que sea lo suficientemente inteligente como para calcular un límite superior para el recuento de líneas en función del tamaño del archivo.
mwfearnley

Respuestas:

51

Utilizar

tail -f -n +1

El uso man taille dará más detalles, el extracto relevante sigue.

<snip>Numbers having a leading plus (`+') sign are relative to the
beginning of the input, for example, ``-n +2'' starts the display at the
second line of the input.</snip>

-f      The -f option causes tail to not stop when end of file is
        reached, but rather to wait for additional data to be appended to
        the input.  The -f option is ignored if the standard input is a
        pipe, but not if it is a FIFO.

-n number
        The location is number lines.
Timo Kluck
fuente
3
¿Podría agregar esos "más detalles" a su respuesta? Explique por qué y cómo funciona su solución. (Encontró su respuesta en la cola de publicaciones de baja calidad.)
kraxor
1
@kraxor Puede encontrar los "más detalles" ejecutando man tail(y leyéndolo) como dice la respuesta, o haciendo una búsqueda en línea de "página de manual de cola" y lea uno de ellos. tailfunciona comenzando en una posición en un archivo, lee (y muestra) hasta el final, y luego se controla el aumento del tamaño del archivo. Cuando el tamaño del archivo aumenta, taillee y muestra desde la posición EOF anterior hasta el nuevo final del archivo.
waltinator
2
@waltinator Realmente no pregunté por mí mismo. Le pedí que agregara más detalles porque su publicación estaba marcada como de baja calidad, pero no quería votar para eliminar porque dio una respuesta correcta.
kraxor
1
Esto es exactamente lo que estaba buscando. He usado el tail -50 {filename}anterior, pero no estaba teniendo éxito combinando los dos.
Sonny
3

Prueba esto:

watch tail {filename}

¿Dónde {filename}está el archivo que desea vigilar? Esto supervisará continuamente el comando para detectar cambios y generará los cambios en stdout. Es bastante útil.

Rick Chatham
fuente
Esto parece una muy buena herramienta. Si bien no dio los resultados que estaba buscando, definitivamente lo tendré en cuenta. Combinarlo con la respuesta aceptada es bastante agradable:watch tail -n +1 {filename}
Sonny
Sí, ¡parece que lo perfeccionaste!
Rick Chatham
watches realmente una herramienta útil, pero para ver cómo cambia la salida de un comando, pero para ver el final de un archivo que se agrega, es mucho mejor usarlo tail -f. --- watch tail {filename}reabrirá y volverá a leer el final del archivo cada dos segundos. Por otro lado, tail -fobserva el crecimiento del archivo y, cuando se detecta, lee inmediatamente solo la parte adjunta. tailf -fes mucho más eficiente y la reacción es mucho más rápida. Además, mostrará continuamente el contenido del archivo desde el punto donde comenzó. --- watchsobrescribe su salida cada dos segundos.
Pabouk