如何查看整个文件并等待更多数据添加到该文件?

如何查看整个文件并等待更多数据添加到该文件?

我想读取整个文件并使其等待输入,就像tail -f 显示完整文件一样。

这个文件的长度总是会改变的,因为这是一个.log文件。

如果我不知道文件的长度,我该怎么办?

答案1

有一种更好的方法可以实现这一目标:

less +F <file>

它将向您显示整个文件,具有完整的功能less并将等待新的输入。如果您想停止等待输入并阅读特定部分,您可以使用 停止^C并继续F

F命令始终在 中可用less,如果您决定在 中打开文件时观察更改less,则点击F将其打开。谢谢希尔吉尔特迪埃斯特夫通配符指出这一点。

答案2

tail允许您添加-n以指定从末尾开始显示的行数,它可以与 结合使用-f。如果参数以-n开头,+则表示从开头开始的行数(01显示整个文件,2指示跳过第一行,如 @Ben 所示)。所以就这样做:

tail -f -n +0 filename

如果您的日志文件被轮换,您可以添加--retry(或按照@Hagen的建议-f and --retry合并-F

另请注意,在图形终端中,您可以使用鼠标和PageUp/PageDown滚动回历史记录(假设您的缓冲区足够大),即使您使用Ctrl+C退出,此信息仍保留在那里tail。如果你使用这个就不太方便了,而且据我所知,你必须使用键盘进行滚动,而且如果你忘记用 启动它,less我不知道有什么方法可以防止取消初始化 termcap 。less-X

答案3

watch命令应该为你做这件事。

你也可以尝试

less +FG 

您将有更多选项与less命令滚动浏览您的文件,因为您说它是一个大文件。

答案4

除了 /u/Anthon 的答案之外,您还可以执行以下操作:

{ cat filename; tail -0f filename; }

tail 的选项-0相当于-n 0,意思是:显示 0 行。但-f会显示新行。

你不需要牙套{ }。我使用它们是因为有时您想以某种方式重定向文件描述符。例如:

{ cat ; tail -0f -; } < /var/log/messages

Ben Milwood 指出:您可能会遇到竞争情况,文件在操作结束cat和操作开始之间增长tail。但同样,这是一个需要学术解决方案的“学术”问题。

相关内容