我喜欢watch命令,但是它有其局限性。

我很好奇我是否可以用watch模仿less的功能。我主要是希望能够通过正在运行的脚本动态修改目录来滚动目录。

评论

我在寻找tail -f foo.log | grep栏,并能够通过重新启动tail / grep管道来动态更改grep命令。

#1 楼

less中,您可以键入F以继续读取文件末尾(例如tail -f);您可以键入:e和文件名来查看其他文件,但是不幸的是,如果输入当前文件的名称,则less不会重新加载该文件。但是,有一个技巧可以让它重新读取当前文件,这是萨布根顿建议的:键入:e,然后输入不存在的文件的名称;导致较少显示错误消息,然后重新加载当前文件。

如果您正在寻找watch ls的替代产品,请参考以下内容: >现代文件管理器(例如Nautilus,Thunar,Konqueror,Dolphin,Finder)实时刷新视图。
Emacs没有实时刷新,但是使用auto-revert-mode时,它将每5秒重新加载文件或目录一次。 (延迟是可配置的)。
尽管w3m主要是Web浏览器,但它使目录和文本文件查看器成为可传递的目录。按R重新加载(本地)URL。


评论


对我来说:e randomnamejkdlfjldf无法加载不存在的文件名,然后重新加载回当前文件:D

–sabgenton
16 Mar 18 '16 at 10:36

@sabgenton谢谢,我不知道。真是个绝招。我已将其添加到我的答案中,但是您可以将其发布为您自己的答案(我希望Zaid可以接受)。

–吉尔斯'所以-不再是邪恶的'
16年3月18日在16:14

@CMCDragonkai不,少+ F只注意附加内容。使用:e nonexistentfile重新读取完全更改的输入。

–吉尔斯'所以-不再是邪恶的'
16年4月19日在11:08

有命令行标记吗?

– CMCDragonkai
16年4月19日在11:18

@PaulWagland不,R无法可靠地刷新文件。它刷新了屏幕,并擦除了一些输入缓冲区,但实际上并不能在所有情况下都从文件中重新加载数据(仅当文件很大时?我没有深入研究代码)。

–吉尔斯'所以-不再是邪恶的'
17年4月20日在9:53

#2 楼

Shift + F将使lesstailf相似。也就是说,如果将更多数据附加到文件,则会刷新该文件。

评论


请注意,这仅适用于追加。如果行被删除或就地编辑,则更少的行不会显示这些更改。

– Nathaniel M. Beaver
16年11月30日在1:26

如何停止跟随模式并重新进入滚动模式?

–汤姆·黑尔
17年2月9日在12:18

Ctrl + C

– Balki
17年2月9日在20:41

balki我的经验是,如果使用$ COMMAND | | | | | | | | | | | | | | |,-,-,-,-,-,-,-,-减。我想知道是否有解决这个问题的好方法?您可以执行类似$ COMMAND> / tmp / file和更少的/ tmp / file这样的操作,但这不是很好。

– Att Righ
18年7月27日在11:13

@AttRigh我从来没有杀死过我的命令(但是我以这种方式读取正在运行的命令的日志,从技术上讲,我不会减少内容)

–耶拿
19年1月11日在13:48



#3 楼

只需键入:

less +F filename


,这将在编辑器中模拟按“ F”键。

评论


谢谢;在我的.bashrc中添加了别名别名check =“ less + F”。

–卢克·戴维斯(Luke Davis)
17年7月27日在21:31



#4 楼

man页面可能会非常有用。不要被他们吓倒。除其他事项外,man less表示您可以使用R命令执行以下操作:

   R      Repaint the screen, discarding any buffered input.  Useful if the file is changing while it is being viewed.


(我知道这个问题已有6年历史了,但是在Google搜索中出现了所以我不是唯一一个点击链接即可到达此处的人。)

评论


万一被另一个程序的输出打乱了屏幕,它会重新绘制屏幕。它不会一致地重新加载文件。我没有深入研究代码以了解其作用,实验上较短的文件不会重新加载。我绝对不会被手册页吓倒,我说的描述措辞很差:“重新绘制”并不表示输入已被重新读取,并且实际行为并不十分适合“如果文件正在更改”(可能是bug?我不知道,因为我不知道该命令应该做什么。

–吉尔斯'所以-不再是邪恶的'
17-4-20在9:51



我不是专家,也没有读过更少的源代码,但是这样做是忘记了它已经知道的关于文件的知识并重新加载它,并根据重新加载的输入刷新其输出。问题显示为“是否有办法动态刷新less命令?”如果在回答之前我已经更彻底地阅读了问题的解释,那么我可能还没有回答,因为他们继续说,他们希望“在目录中滚动,因为它是通过运行的脚本动态修改的”。少将不是正确的命令。

–丹尼斯·埃森森(Dennis Estenson)
17年4月21日在3:58

即使使用3字节长的文件,对我来说也很好用。我无法想象为什么它也不适用于较大的文件。

–艾迪生
18-3-22在3:51

大!对我来说,它适用于长文件和短文件。我只是注意到了两个可能的问题:1.较少的是不使用文件名重新打开文件-即,当文件的inode更改时(例如,使用mv覆盖文件),则旧文件内容保持不变(可能是重新读取了旧的inode) --- 2.显示的第一行可能与原始文件内容中的字节偏移相同。因此,当行长更改时,第一条显示的行可能不完整,并且显示的行可能会上下移动。

– pabouk
18/09/13在11:27



R并不总是有效。参见unix.stackexchange.com/questions/4351/…

– Wisbucky
19年4月17日在19:18

#5 楼

用于重绘的R并不总是重新加载文件。[1]

总是重新加载文件的解决方法是按hq,这将打开“帮助”页面,然后退出。它具有强制重新加载文件的副作用。


[1]以下是R可以重新加载和不重新加载的情况的一些示例:



>>>的更改:请重新加载

sed -i,gEdit,TextEdit:不要重新加载
在Linux上,vi的更改:请重新加载
在Mac上,vi发生了变化:请勿重新加载

我相信区别在于inode是否发生了变化(您可以使用ls -i foo.txt进行检查)。如果inode更改,则R将不起作用。

评论


我真的很喜欢总部黑客,但是请注意,如果您碰巧正在查看变得更短的文件的末尾,则失败的机会会更少。 (确实,如果您正好在新文件结尾之后的任何位置被搜索),再加上一个键,就可以避免崩溃:ghq。

–雕刻师
19年10月10日在1:09

#6 楼

我通常只键入G一次拖尾输出。我发现它在像CIFS这样的网络文件系统上特别有用。

评论


这更多地是按需刷新的文件,打开时所花费的时间更少。除了跳转到文件末尾之外,如果文件已更改,它还会重新加载文件。

–jorb
17年6月6日在13:23

谢谢。第一次对我来说并没有刷新,但现在看来可以正常工作。在这个人中,没有刷新文件的记录。 man less:'G或>或ESC->转到文件中的N行,默认为文件末尾。我在这里删除了我以前的错误评论,对不起。

–雅罗斯拉夫·尼基琴科(Yaroslav Nikitenko)
17年6月8日在13:56

顺便说一句,您怎么称呼“一次性”? Less的维护者Mark Nudelman回答:“ G命令通常不像R命令那样强制重新读取文件。如果在以下情况下尚未读取文件末尾,则似乎可以这样做:调用G,因此跳转到文件末尾必须是第一次读取该数据,例如,如果跳转到G末尾,然后又跳回到1G开头,那么另一个程序将修改数据在文件末尾(不更改长度),“(续)

–雅罗斯拉夫·尼基琴科(Yaroslav Nikitenko)
17年6月12日在20:14

(续)“然后,您再次使用G跳到末尾,您将看不到修改后的数据。但是,如果您没有跳到末尾并回到开头,那么第一次执行G命令​​时,它必须读取第一次在这里存储数据,当然,它将看到自第一次调用less以来发生的任何修改。”

–雅罗斯拉夫·尼基琴科(Yaroslav Nikitenko)
17年6月12日在20:14

在这种情况下,我提到这是一次刷新,而不是动态刷新,这是原始问题的一部分。

–jorb
17年6月12日在20:31

#7 楼

运行less时,按“ F”键将执行与tail -f类似的“跟随”操作,但是我不确定这是否可以实现您在此处寻找的功能。

#8 楼

您可以使用vim读取文件,然后将以下映射添加到.vimrc文件中,并且可以轻松地使用,r重新加载文件:

let mapleader = ","
nnoremap <leader>r :edit <CR>


请注意,如果您编辑了文件已经存在,vim会抱怨。只需更改为

let mapleader = ","
nnoremap <leader>r :edit! <CR>


即可忽略更改。

评论


他们将不得不从冷死的手中撬开vim。这个问题的内容要少得多,但是作为一个自己患有单躁狂倾向的人,我表示同情!

–本杰明·R
18-10-26在16:05

#9 楼

您可以将其通过管道传输到tail -f,这将导致您跟踪输出。但是,您将失去在输出中移动(滚动)的功能。

#10 楼

我只是像其他任何人一样找到了该线程。 br />
我最终在我的终端程序(SecureCRT)中为此创建了一个宏按钮。
该宏就是'gG'。