使用tail -F命令实时查看文件变化

6
我有一个脚本,可以收集不断更新的文件的大小。我将它的大小输出到日志文件中(echo 'filesize is $size' > log.txt),所以我只有最后一次大小的信息。因此,只有一行。
现在,在另一个终端中,我想要tail那个日志文件,以实时查看它的大小增长。结果发现,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相反)。

谢谢!


3
如果您只想监视文件大小,请尝试使用 watch du -skh 文件名 - UserASR
虽然这是一个经过深入探讨的问题,但 StackOverflow 社区正在“以编程方式解决问题”,而一般软件实用工具的请求更相关于 http://superuser.com/。 - Inian
1
@Inian,关于Bash和shell编程的问题在Stack Overflow上是完全适用的。即使有些问题不适用,unix.stackexchange.com也是更好的重定向人们的地方。 - dimo414
@ASR,它工作得非常好,谢谢。 - Adriano_Pinaffo
4个回答

9

请使用此命令。

watch tail -n 1 log.txt

那会做什么?Man 页面上说:“-n number 位置是 number 行”。 - clearlight
1
tail -n 1 显示文件的最后一行,watch tail -n 1 每隔2秒钟显示文件的最后一行,并在此之前清除屏幕。 - OregonTrail

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

这种方法不会出现将命令和参数传递给watch的缺点(有时需要额外的步骤才能正确完成),并且它还可以清除终端。


非常有趣,使用clear命令给人的印象是更新区域周围的屏幕没有变化。尽管您可以向上滚动并看到内容重复,但这非常实用。谢谢。 - Adriano_Pinaffo

5
您可以使用 watch 命令来监视文件的变化和差异(-d),每隔 n 秒刷新一次。
watch -n 5 -d cat log.txt

1
watch -n 5 -d cat log.txt - bishop
1
@codeforester:看来cat有用武之地了,谢谢! - Inian
没有-d标志只会打印差异! - Inian
对于那些说“watch -n 5 -d cat log.txt”无法工作的人,我在Ubuntu Xenial上使用它很好。 - Adriano_Pinaffo
@Adriano_epifas:您可以点击答案左侧的小勾来标记它为“已接受”和“有效”! - Inian
显示剩余10条评论

0

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

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

编辑:请记住,这只能帮助您监视文件事件。当发生此类事件时,您要做什么并不是我的事。

附言:您是否考虑过写入文件的进程可能仅在存在换行符时才刷新其写入缓冲区


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接