Daryl Spitzer Asked: 2010-02-26 08:39:33 +0800 CST2010-02-26 08:39:33 +0800 CST 2010-02-26 08:39:33 +0800 CST 当文件被覆盖(而不是附加到)时,是否有等效的 `tail -f`? 772 如何持续监控被持续覆盖的文件?具体来说,该文件包含后台进程反复打开和重写的单行文本。 我希望tail -F能奏效,但它没有。 更新:我希望这不会是相关的,但我正在运行 Mac OS X 10.5.8。 tail overwrite 5 个回答 Voted Best Answer Dominik 2010-02-26T08:50:05+08:002010-02-26T08:50:05+08:00 您可以使用 watch 重复执行命令,因此在您的情况下 watch -n 1 cat filename Matt Simmons 2010-02-26T09:23:35+08:002010-02-26T09:23:35+08:00 有更好的方法可以做到这一点,但它会奏效 while true ; do echo -n "`date +%s:` " >> file.log ; cat file >> file.log ; done file.log 文件将增长...快速... 如果您需要更多功能,例如检查文件内容是否与之前的内容相同,您可以将其展开为脚本。只需在下面发表评论,我会提供帮助。 voretaq7 2010-02-26T09:26:58+08:002010-02-26T09:26:58+08:00 在 BSD 系统(我相信大多数其他系统)tail -f上,如果它看到文件已被截断(这听起来正是您想要的行为),它将重置到文件的开头。 在 Linux 系统上也会发生同样的事情,但至少在我放置在 tail 周围的 Debian 盒子上有一个“轮询间隔”,所以你需要告诉它不要在检查文件 ( tail -s 0 -f ...) 之间休眠,以便它注意到截断,否则会发生奇怪的事情(如果文件在写出时大小相同或更小,则没有输出,如果文件更大,则在 tail 的当前字节计数标记之后得到所有内容,等等。 - 玩你的 tail impementation 看看它是如何行为) 作为 Linux 和 BSD 系统上的替代方案,tail 有一个-F选项(类似于-f但检查文件是否已轮换——即名称指向不同的 inode 编号)。如果文件被截断而不是取消链接和替换,这对您没有帮助。 Dennis Williamson 2010-02-26T10:28:56+08:002010-02-26T10:28:56+08:00 穷人watch: while true do clear cat file sleep 1 done cat将文件是否长于一个屏幕更改为: tail -n $((LINES - 4)) file 您可以添加条件来检查文件时间戳等的更改。 joschi 2010-02-27T02:55:29+08:002010-02-27T02:55:29+08:00 您可以使用FSEvents API和一个小脚本来监视文件(或更准确地说是包含文件的目录)。
您可以使用 watch 重复执行命令,因此在您的情况下
有更好的方法可以做到这一点,但它会奏效
file.log 文件将增长...快速...
如果您需要更多功能,例如检查文件内容是否与之前的内容相同,您可以将其展开为脚本。只需在下面发表评论,我会提供帮助。
在 BSD 系统(我相信大多数其他系统)
tail -f
上,如果它看到文件已被截断(这听起来正是您想要的行为),它将重置到文件的开头。在 Linux 系统上也会发生同样的事情,但至少在我放置在 tail 周围的 Debian 盒子上有一个“轮询间隔”,所以你需要告诉它不要在检查文件 (
tail -s 0 -f ...
) 之间休眠,以便它注意到截断,否则会发生奇怪的事情(如果文件在写出时大小相同或更小,则没有输出,如果文件更大,则在 tail 的当前字节计数标记之后得到所有内容,等等。 - 玩你的 tail impementation 看看它是如何行为)作为 Linux 和 BSD 系统上的替代方案,tail 有一个
-F
选项(类似于-f
但检查文件是否已轮换——即名称指向不同的 inode 编号)。如果文件被截断而不是取消链接和替换,这对您没有帮助。穷人
watch
:cat
将文件是否长于一个屏幕更改为:您可以添加条件来检查文件时间戳等的更改。
您可以使用FSEvents API和一个小脚本来监视文件(或更准确地说是包含文件的目录)。