tail: lettura di un intero file, quindi seguito


35

Vorrei un tail -ftipo di comportamento che legge l'intero file e continua a seguirlo mentre è scritto.


SOLUZIONE

Sulla base della risposta che ho accettato, funziona: tail -f -n +1 {filename}

Perché funziona: l' -fopzione continua a "seguire" il file e genera nuove righe man mano che vengono scritte nel file. I -n +1istruisce tailper avviare la lettura del file dalla prima linea. L'utilizzo -n -10inizierebbe con le ultime dieci righe del file.


2
Questo è un commento, non una domanda. E tail non lo fa già: tail -f -n 10000000000000000000probabilmente mostrerà tutte le linee, no? (forse il 10000000000000000000 è un po 'troppo: =))
Rinzwind

Credo che more fileNamefarebbe proprio questo
ryekayo l'

1
no..more non aggiungerà ulteriori righe aggiunte al file dopo che ne sono state avviate altre.
Rinzwind,

Presumibilmente tail -f -n 100...comporterà la pre-lettura del file per determinare il numero di righe, a meno che non sia abbastanza intelligente da elaborare un limite superiore per il conteggio delle righe in base alla dimensione del file.
mwfearnley,

Risposte:


51

Uso

tail -f -n +1

L'utilizzo man tailti fornirà maggiori dettagli, di seguito il relativo estratto.

<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.

3
Potresti aggiungere questi "maggiori dettagli" alla tua risposta? Spiega perché e come funziona la tua soluzione. (Ho trovato la tua risposta nella coda di messaggi di bassa qualità.)
kraxor,

1
@kraxor Puoi trovare i "maggiori dettagli" eseguendo man tail(e leggendolo) come dice la risposta, oppure fai una ricerca online per "manpage tail" e leggine uno. tailfunziona iniziando da una posizione in un file, legge (e visualizza) fino alla fine, quindi monitora l'aumento delle dimensioni del file. Quando la dimensione del file aumenta, taillegge e visualizza dalla precedente posizione EOF alla nuova fine del file.
Waltinator,

2
@waltinator Non me l'ho proprio chiesto. Gli ho chiesto di aggiungere ulteriori dettagli perché il suo post è stato contrassegnato come di bassa qualità, ma non volevo votare per eliminare perché ha dato una risposta corretta.
kraxor,

1
Questo e 'esattamente quello che stavo cercando. Ho usato il tail -50 {filename}precedente, ma non ho avuto successo combinando i due.
Sonny,


3

Prova questo:

watch tail {filename}

dov'è {filename}il file che vuoi tenere d'occhio. Ciò monitorerà continuamente il comando per le modifiche e invierà le modifiche a stdout. È abbastanza utile.


Questo sembra uno strumento molto carino. Anche se non ha dato i risultati che stavo cercando, lo terrò sicuramente a mente. Combinarlo con la risposta accettata è piuttosto carino:watch tail -n +1 {filename}
Sonny,

Sì, sembra che tu l'abbia perfezionato!
Rick Chatham,

watchè davvero uno strumento utile, ma per guardare la modifica dell'output di un comando, ma per guardare la fine di un file che viene aggiunto è molto meglio usare tail -f. --- watch tail {filename}riaprirà e rileggerà la fine del file ogni due secondi. D'altra parte controlla tail -fla crescita del file e quando viene rilevato legge immediatamente solo la parte allegata. tailf -fè molto più efficiente e la reazione è molto più veloce. Inoltre mostrerà continuamente il contenuto del file dal punto in cui hai iniziato. --- watchsovrascrive il suo output ogni due secondi.
pabouk,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.