少了“更新文件”之类的功能


9

我想观看一个文件,该文件每5分钟就会被覆盖less。如何使less遵循新文件描述符而不是保持旧文件描述符显示?watch "cat file"不会这样做,因为文件太长而无法放入一个终端窗口中。


2
“跟随”表示在文件末尾之后。您可能想澄清一下您的文件已被覆盖,并且您有兴趣重新打开它。
chutz

我的意思是遵循文件描述符(如tail -f的手册页中所定义)。但是尽管如此,我已经澄清了我的问题。
d135-1r43

使用less --follow-name请参阅unix.stackexchange.com/a/74287/112522
djsutho,2015年

Answers:


10

您可以通过在中查看文件时发出F命令(Shift+F)来获得此效果less。要停止关注并切换回分页,请按Ctrl+C

由于文件仅每5分钟更改一次,因此您也可以使用tail -f更长的睡眠时间并指定更长的睡眠时间-s(默认为1秒)。例如,

tail -f -s 60 myfile

myfile每60秒检查一次输出。

编辑:由于误导性的问题,上述答案不能令人满意。第二次尝试如下:

less每5分钟重新打开一个文件,请尝试以下操作:

while true; do ( sh -c 'sleep 600 && kill $PPID' & less myfile ); done

这将产生一个子shell,该子shell在后台运行另一个shell进程,该进程指示在5分钟后终止其父进程。然后使用打开文件less。当后台的shell命令杀死父子shell时,它将杀死其所有子节点,包括“ less”命令。然后循环再次开始该过程。

我知道要杀死它的唯一简单方法是杀死原始shell所在的终端。如果这是不可接受的,则可以使用“ killfile”技巧:

touch killfile
while [ -f killfile]; do stuff; done

要停止这样做stuffrm将killfile放在另一个shell中。


这仅对我的情况有用。监视的文件很大,顶部的更新信息。它不是“滚动”日志文件。Shift + F立即滚动到文件末尾...
d135-1r43

您应该编辑问题以进行澄清。我也编辑了答案以回答这个问题。
bonsaiviking 2012年

watch -n 1 less <filename>
axel22

1

您可以在中执行类似的操作vim

启动服务器会话vim

vim -R --servername refresh_session

然后在另一个控制台中,监视文件是否更新,并告诉vim会话在文件更新后立即重新加载该文件:

inotifywait -e close_write -m your_log_file | while read filename events; do
    vim --servername refresh_session --remote $filename
done

一些陷阱。

  • 如果您vim未使用该clientserver功能进行编译,那么这当然是行不通的。
  • inoifywait删除文件后将停止工作。因此,我希望您的文件被覆盖。当然,也可以解决此问题。

而且,如果您想获得更less喜欢的体验,可以使用less宏在中获取less键绑定vim

/usr/share/vim/vim73/macros/less.sh --servername refresh_session

0

我找到了一个古老但非常好的“少”程序(“寻呼机”)。它具有刷新文件的“ R”命令。

它称为“ lv”,您可以使用以下命令将其安装在Ubuntu上:

sudo apt install lv

但是,它似乎没有自动重装功能。



-1

尾巴是你的朋友。“ tail -f filename”将在出现新行时向您显示。

或者,如果您要查找文件中间的更改,也许每隔几分钟运行一次脚本以将文件副本复制到临时位置并对其进行比较?


即使在原始帖子中也很清楚有一个“新文件”。因此,文件描述符将已更改,但tail -f仍会读取旧的文件描述符。
Alastair Irvine

我认为那不是很公平。为了清晰起见,我们需要查看原始的未经编辑的帖子,因为如果您查看我的回答的日期,那就是我正在回答的问题。在这个未编辑的问题中,我的回答很合理。serverfault.com/posts/445899/revisions
David W

我确实检查了修订。关键字“新文件”。
Alastair Irvine
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.