tail:读取整个文件,然后执行以下操作


35

我想要一种tail -f行为,它读取整个文件,然后在写入文件时继续遵循它。


根据我接受的答案,此方法有效: tail -f -n +1 {filename}

为何起作用:-f选项继续“跟随”文件并在将新行写入文件时输出新行。该-n +1指示tail开始阅读从第一行的文件。使用-n -10将从文件的最后十行开始。


2
这是评论,不是问题。尾部是否还没有这样做:tail -f -n 10000000000000000000可能会显示所有行,不是吗?(也许10000000000000000000有点大:=))
Rinzwind

我相信more fileName会做到这一点
ryekayo 2014年

1
no..more不会在启动更多文件后添加添加到文件中的额外行。
Rinzwind

大概tail -f -n 100...会涉及到预读文件以确定行数,除非它足够聪明,可以根据文件大小确定行数的上限。
mwfearnley

Answers:


51

使用

tail -f -n +1

使用man tail将为您提供更多细节,相关摘录如下。

<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
您能否在回答中添加这些“更多详细信息”?请解释为什么以及您的解决方案如何工作。(在低质量的帖子队列中找到您的答案。)
kraxor 2014年

1
@kraxor您可以man tail按照答案的说明执行(阅读)来找到“更多详细信息” ,或者在线搜索“ tail manpage”并阅读其中的一个。tail通过从文件中的某个位置开始,读取(并显示)到末尾,然后监视文件大小的增加来工作。当文件大小增加时,tail从以前的EOF位置读取并显示到文件的新结尾。
waltinator 2014年

2
@waltinator我并不是真的要求自己。我要求他添加更多详细信息,因为他的帖子被标记为低质量,但我不想投票删除,因为他给出了正确的答案。
kraxor 2014年

1
这正是我想要的。我以前使用tail -50 {filename}过,但结合两者并没有成功。
桑尼2014年


3

尝试这个:

watch tail {filename}

{filename}您要关注的文件在哪里。这将连续监视命令的更改并将更改输出到stdout。非常方便。


这看起来是一个非常不错的工具。尽管它并不能完全满足我的期望,但我一定会牢记这一点。将其与接受的答案结合起来非常好:watch tail -n +1 {filename}
桑尼2014年

是的,看起来您已经完善了!
里克·查塔姆

watch虽然确实是一个有用的工具,但是对于观察命令输出的变化却能观察附加文件的末尾,使用效果更好tail -f。--- watch tail {filename}将每两秒钟重新打开并重新读取文件的结尾。另一方面tail -f,注意文件的增长,并在检测到文件时立即读取附加的部分。tailf -f效率更高,反应更快。此外,它将从您开始的位置连续显示文件内容。--- watch每两秒钟覆盖其输出。
pabouk
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.