用ls或tree的输出来减少颜色损失?


12

tree并且ls可以通过对文件名进行不同的着色来区分文件类型。

treels经常输出一长串文件(包括目录),因此我将stdout输出传送到less

less不保留颜色。我们如何使其显示颜色或其他替代方式?

刚刚看到了链表,但是管道连接less -R还是less -r不起作用。我的操作系统是Ubuntu 12.04。less版本444:2011年6月9日。


1
@JosephR。另一个问题是半相关的,但不是重复的。在这里,我们正在谈论ls(不tree)针对一些实现需要被告知给力的色彩输出,当输出不会去终端(除了less -R被需要)
斯特凡Chazelas

你试过了tree -C | less -R吗?我认为该-C选项相当于tree的less --color=always(至少在Ubuntu 12.04上对我有用)。
steeldriver

@steeldriver谢谢。有用。tree有和没有-C单独使用时总是输出颜色,但是为什么与它们一起使用时它们会有所不同less呢?
蒂姆(Tim)

@Tim 2个原因:1,less删除由默认的颜色,除非你给它的-R选项,告诉它把它留在,和2 tree以及ls和其他程序通常把着色关闭,当他们发现自己的输出到另一个程序(如less),而不是直接发送到终端,除非您用-C或强制着色--color=always
jw013 2014年

2
您写的这个链表是什么?
Anthon

Answers:


15

我假设您正在使用ls --color=auto,它告诉您ls在“自动”模式下使用颜色。“自动”模式告诉less您STDOUT是否为终端,如果是,则使用颜色,否则不使用颜色。当通过管道ls进入less,stdout不是终端,它连接到的STDIN less,这是正常的管道。

解决方案,使用ls --colorls --color=always

但是现在这导致了另一个潜在的问题。根据您的less,它可能不会显示颜色,但会显示转义码。解决方法是使用less -R。这告诉less传递用于ANSI颜色转义的转义代码。您不希望使用它,-r因为这会导致长行环绕的问题,因为更少的行将无法正确计算行长。

如此完整的解决方案:

ls --color | less -R

同样适用于tree

tree -C | less -R
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.