使用tail -F查看实时更改的文件

时间:2017-01-20 05:11:39

标签: linux bash shell tail

我有一个脚本来收集正在不断提供的文件的大小。我将其大小回显到日志文件(echo' filesize是$ size'> log.txt)所以我只有最后一个大小的信息。所以,只有一行。

现在,在另一个终端中,我想拖尾该日志文件以查看其实时增加的大小。事实证明,tail -f path / to / file为我提供了我想要的输出但是它一直跳到下一行(正如预期的那样,我猜)。

因此,输出类似于:

$ tail -F log.txt 2>/dev/null
filesize is 1.658 GB
filesize is 1.659 GB
filesize is 1.659 GB
filesize is 1.660 GB

我想要的东西更像是命令" less"你没有光标回来。也许一个更好的例子是" mtr",它不断更新屏幕上的信息而不用下一行(而不是traceroute)。

谢谢,

4 个答案:

答案 0 :(得分:3)

您可以watch命令每隔-d秒监控文件更改/差异(n

watch -n 5 -d cat log.txt

答案 1 :(得分:3)

使用此命令。

watch tail -n 1 log.txt

答案 2 :(得分:2)

while [ 1 ]; do sleep 1; clear; tail log.txt; done

这没有将命令和参数传递给watch的缺点(有时你需要跳出额外的循环来使它正确),并清除终端。

答案 3 :(得分:0)

接收文件实时信息的最有效解决方案是使用inotify

这是一个Linux内核功能,用于在特定文件更改时接收通知。您可以编写自己的使用该功能的c程序,也可以使用inotify-wait或inotify-watch命令构建脚本。你可能需要安装它。但两者都有很好的记录。 新版本的tail也使用这个Linux内核功能

编辑:请记住,这只会帮助您监控文件事件。当这样的事件发生时你所做的不是我的一杯茶。

PS。您是否认为写入文件MAYBE的进程仅在存在换行符时刷新其写入缓冲区