![使用 less 跟踪文件时重新打开被截断的文件](https://linux22.com/image/801271/%E4%BD%BF%E7%94%A8%20less%20%E8%B7%9F%E8%B8%AA%E6%96%87%E4%BB%B6%E6%97%B6%E9%87%8D%E6%96%B0%E6%89%93%E5%BC%80%E8%A2%AB%E6%88%AA%E6%96%AD%E7%9A%84%E6%96%87%E4%BB%B6.png)
有时我会在日志文件上运行less +F
,然后将其截断。我想less
意识到文件已被截断,并开始跟踪文件现在的状态。目前,我被迫执行以下操作:
- (1 号航站楼) >
less +F my-file.txt
- (2 号航站楼) >
printf "" > my-file.txt
- (1 号航站楼)> 少退出
- (终端 1)> 重新启动 less:
less +F my-file.txt
我必须执行步骤 3-4每次我截断了文件(这是许多o次)。这真的很痛苦。
我想要做:
- (终端 1) >
less +F my-file.txt
(以及所需的任何额外选项) - (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 号航站楼) >
less --follow-name +F my-file.txt
- (2 号航站楼) >
printf "" > my-file.txt
- (1 号航站楼)> 尽情享受吧!
PS:许多 shell 不使用 printf,而是直接使用重定向运算符来截断:> my-file.txt