tail: Lire un fichier entier, puis suivre

35

Je voudrais un tail -ftype de comportement qui lit le fichier entier et continue à le suivre tel qu'il est écrit.


SOLUTION

Sur la base de la réponse que j'ai acceptée, cela fonctionne: tail -f -n +1 {filename}

Pourquoi cela fonctionne-t-il: L' -foption continue de "suivre" le fichier et de générer de nouvelles lignes au fur et à mesure de leur écriture dans le fichier. La -n +1commande tailpour commencer à lire le fichier à partir de la première ligne. L'utilisation -n -10commencerait par les dix dernières lignes du fichier.

Fiston
la source
2
Ceci est un commentaire pas une question. Et tail ne le fait pas déjà: tail -f -n 10000000000000000000montrera probablement toutes les lignes, n'est-ce pas? (peut-être que 10000000000000000000 est un peu cher: =))
Rinzwind
Je crois more fileNameque cela
suffirait
1
no..more n'ajoutera pas de lignes supplémentaires ajoutées au fichier après le démarrage de plus.
Rinzwind
On tail -f -n 100...peut supposer qu’il faudra au préalable lire le fichier pour déterminer le nombre de lignes, sauf s’il est assez intelligent pour calculer une limite supérieure pour le nombre de lignes en fonction de la taille du fichier.
mwfearnley

Réponses:

51

Utilisation

tail -f -n +1

L'utilisation man tailvous donnera plus de détails, voici l'extrait pertinent.

<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
la source
3
Pourriez-vous s'il vous plaît ajouter ces "plus de détails" à votre réponse? Veuillez expliquer pourquoi et comment votre solution fonctionne. (Vous avez trouvé votre réponse dans la file des articles de qualité
médiocre
1
@kraxor Vous pouvez trouver "plus de détails" en l'exécutant man tail(et en le lisant) comme le dit la réponse, ou effectuez une recherche en ligne pour "queue de page de manuel" et lisez-en un. tailfonctionne en commençant à une position dans un fichier, lit (et affiche) jusqu'à la fin, puis en surveillant la taille du fichier augmente. Lorsque la taille du fichier augmente, taillit et affiche de la position EOF précédente à la nouvelle fin du fichier.
waltinator
2
@waltinator Je ne me suis pas vraiment demandé. Je lui ai demandé d'ajouter plus de détails parce que son message était signalé comme étant de mauvaise qualité, mais je ne voulais pas voter pour supprimer car il avait donné une réponse correcte.
kraxor
1
Ceci est exactement ce que je cherchais. J'ai utilisé tail -50 {filename}précédemment, mais je n'avais pas réussi à combiner les deux.
Sonny
3

Essaye ça:

watch tail {filename}

{filename}est le fichier que vous voulez garder un oeil. Cela surveillera en permanence la commande pour vérifier les modifications et les affichera dans stdout. C'est très pratique.

Rick Chatham
la source
Cela ressemble à un très bel outil. Bien que cela n’ait pas donné les résultats que je recherchais, je le garderai certainement à l’esprit. Le combiner avec la réponse acceptée est très agréable:watch tail -n +1 {filename}
Sonny
Oui, on dirait que vous l'avez perfectionné!
Rick Chatham
watchC’est vraiment un outil utile mais qui permet de regarder la modification du résultat d’une commande mais de regarder la fin d’un fichier ajouté, c’est bien mieux tail -f. --- watch tail {filename}va rouvrir et relire la fin du fichier toutes les deux secondes. D'autre part, tail -fsurveille la croissance du fichier et, lorsqu'il est détecté, lit immédiatement la partie ajoutée. tailf -fest beaucoup plus efficace et la réaction est beaucoup plus rapide. De plus, le contenu du fichier sera affiché en permanence à partir du point où vous avez commencé. --- watchécrase sa sortie toutes les deux secondes.
Pabouk