tail: Eine ganze Datei lesen und dann folgen

35

Ich möchte eine tail -fArt von Verhalten, das die gesamte Datei liest und sie dann weiter verfolgt, während sie geschrieben wird.


LÖSUNG

Basierend auf der von mir akzeptierten Antwort funktioniert Folgendes: tail -f -n +1 {filename}

Warum es funktioniert: Die -fOption "folgt" weiterhin der Datei und gibt neue Zeilen aus, wenn diese in die Datei geschrieben werden. Der -n +1Befehl tailzum Lesen der Datei beginnt in der ersten Zeile. Die Verwendung -n -10würde mit den letzten zehn Zeilen der Datei beginnen.

Sonny
quelle
2
Dies ist ein Kommentar, keine Frage. Und macht Schwanz das nicht schon: werden tail -f -n 10000000000000000000wohl alle Zeilen zeigen, oder? (vielleicht ist die 100000000000000000 ein bisschen viel: =))
Rinzwind
Ich glaube, ich more fileNamewürde genau das tun
Ryekayo
1
no..more fügt der Datei keine zusätzlichen Zeilen hinzu, nachdem more gestartet wurde.
Rinzwind
Voraussichtlich tail -f -n 100...muss die Datei vorab gelesen werden, um die Anzahl der Zeilen zu bestimmen, es sei denn, es ist klug genug, eine Obergrenze für die Zeilenanzahl basierend auf der Dateigröße zu ermitteln.
Mwfearnley

Antworten:

51

Verwenden

tail -f -n +1

Wenn man tailSie verwenden, erhalten Sie weitere Informationen. Der entsprechende Auszug folgt.

<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
quelle
3
Könnten Sie bitte diese "mehr Details" zu Ihrer Antwort hinzufügen? Bitte erläutern Sie, warum und wie Ihre Lösung funktioniert. (Hab deine Antwort in der Warteschlange für Posts mit niedriger Qualität gefunden.)
kraxor
1
@kraxor Sie können die "mehr Details" finden, indem Sie sie ausführen man tail(und lesen), wie in der Antwort angegeben, oder eine Online-Suche nach "tail manpage" durchführen und eine davon lesen. tailBeginnt an einer Position in einer Datei, liest (und zeigt) bis zum Ende und überwacht dann die Dateigröße. Wenn die Dateigröße zunimmt, tailwird von der vorherigen EOF-Position bis zum neuen Dateiende gelesen und angezeigt.
Waltinator
2
@waltinator Ich habe nicht wirklich nach mir gefragt. Ich habe ihn gebeten, weitere Details hinzuzufügen, da sein Beitrag eine schlechte Qualität aufweist, aber ich wollte nicht für das Löschen stimmen, da er die richtige Antwort gegeben hat.
Kraxor
1
Genau das habe ich gesucht. Ich habe das tail -50 {filename}vorher verwendet, aber hatte keinen Erfolg, die zwei zu kombinieren.
Sonny
3

Versuche dies:

watch tail {filename}

Wo {filename}ist die Datei, die Sie im Auge behalten möchten? Dadurch wird der Befehl kontinuierlich auf Änderungen überwacht und die Änderungen an stdout ausgegeben. Es ist ziemlich praktisch.

Rick Chatham
quelle
Das sieht nach einem sehr schönen Werkzeug aus. Es hat zwar nicht ganz die gewünschten Ergebnisse geliefert, aber ich werde es auf jeden Fall im Hinterkopf behalten. Es mit der akzeptierten Antwort zu kombinieren ist ziemlich nett:watch tail -n +1 {filename}
Sonny
Ja, sieht aus, als hättest du es perfektioniert!
Rick Chatham
watchist wirklich ein nützliches Werkzeug, aber um zu beobachten, wie sich die Ausgabe eines Befehls ändert, aber um das Ende einer angehängten Datei zu beobachten, ist es viel besser, es zu verwenden tail -f. --- watch tail {filename}wird alle zwei Sekunden das Ende der Datei erneut öffnen und lesen. Auf der anderen Seite wird tail -fauf das Wachstum der Datei geachtet und wenn sie erkannt wird, wird sofort nur der angehängte Teil gelesen. tailf -fist viel effizienter und die Reaktion ist viel schneller. Außerdem wird der Dateiinhalt von dem Punkt an, an dem Sie begonnen haben, fortlaufend angezeigt. --- watchüberschreibt seine Ausgabe alle zwei Sekunden.
Pabouk