使用 less 跟踪文件时重新打开被截断的文件

使用 less 跟踪文件时重新打开被截断的文件

有时我会在日志文件上运行less +F,然后将其截断。我想less意识到文件已被截断,并开始跟踪文件现在的状态。目前,我被迫执行以下操作:

  1. (1 号航站楼) >less +F my-file.txt
  2. (2 号航站楼) >printf "" > my-file.txt
  3. (1 号航站楼)> 少退出
  4. (终端 1)> 重新启动 less:less +F my-file.txt

我必须执行步骤 3-4每次我截断了文件(这是许多o次)。这真的很痛苦。

我想要做:

  1. (终端 1) > less +F my-file.txt(以及所需的任何额外选项)
  2. (2 号航站楼) >printf "" > my-file.txt

就是这样。less会自动意识到文件已被截断,并从头开始跟踪新文件。

这可能吗?我应该使用哪个标志来实现这一点?

答案1

这不是您想要的答案,但您可以尝试使用'尾部-F'(相对于'尾部-f') 这将为您提供您正在寻找的行为。

答案2

你为什么不像这样把它们结合起来呢?

tail -F filename | tee | less

这对我来说很有效。

答案3

您想要指定--follow-name参数less。从手册页

通常,如果在执行 F 命令时重命名了输入文件,则 less 将继续显示原始文件的内容,尽管其名称已更改。如果指定了 --follow-name,则在执行 F 命令期间,less 将定期尝试按名称重新打开文件。如果重新打开成功并且文件与原始文件不同(这意味着已创建了一个与原始(现已重命名)文件同名的新文件),less 将显示该新文件的内容。

因此,您的步骤现在是:

  1. (1 号航站楼) >less --follow-name +F my-file.txt
  2. (2 号航站楼) >printf "" > my-file.txt
  3. (1 号航站楼)> 尽情享受吧!

PS:许多 shell 不使用 printf,而是直接使用重定向运算符来截断:> my-file.txt

相关内容