Tubar a saída de sl ou tree para menos perder cores?

12

treee lspode distinguir tipos de arquivos colorindo os nomes dos arquivos de maneira diferente.

treee lsgeralmente produz uma longa lista de arquivos (incluindo diretórios), então canalizo a saída stdout para less.

Mas lessnão preserva as cores. Como podemos mostrar cores ou algumas formas alternativas?

Acabei de ver a lista vinculada, mas passar para less -Rou less -rnão funciona. Meu sistema operacional é o Ubuntu 12.04. lessé a versão 444: 09 de junho de 2011.

Tim
fonte
1
@JosephR. a outra pergunta é meio-relacionada, mas não duplicada. Aqui, estamos falando ls(não tree) para as quais algumas implementações precisa ser dito para a saída de força de cor quando a saída não ir a um terminal (além de less -Rser necessário)
Stéphane Chazelas
Você já tentou tree -C | less -R? A -Copção é o equivalente a menos da árvore --color=always, acho (pelo menos funciona para mim, no Ubuntu 12.04).
Steeldriver
@steeldriver thanks. funciona. treesempre com e sem -Csaída sempre são produzidas em cores, mas por que são diferentes quando usadas less?
Tim
@ Razões do Tim 2: 1. lessremove as cores por padrão, a menos que você dê a -Ropção, que diz para deixá-lo dentro e 2. treee lse outros programas geralmente desativam a cor quando detectam que sua saída está indo para outro programa (como less) em vez de diretamente para o seu terminal, a menos que você force a coloração com -Cou --color=always.
Jw013 29/07/2014
2
Sobre o que é essa lista vinculada sobre a qual você escreve?
Anthon 29/07

Respostas:

15

Eu vou assumir que você está usando ls --color=auto, o que diz lspara usar cores no modo 'automático'. O modo 'Automático' indica lesspara ver se o STDOUT é um terminal e, nesse caso, use cores, caso contrário, não use cores. Quando você lsentra no lesscanal, o STDOUT não é um terminal, ele está conectado ao STDIN de less, que é um canal normal.

A solução, use ls --colorou ls --color=always.

No entanto, agora isso leva a outro problema em potencial. Dependendo do seu less, pode não mostrar a cor, mas mostrar os códigos de escape. A solução é usar less -R. Isso diz lesspara passar pelos códigos de escape para escapes de cores ANSI. Você não deseja usá-lo, -rpois isso causará problemas com linhas longas que envolvem, pois menos não calcula corretamente o comprimento da linha.

Solução tão completa:

ls --color | less -R

Da mesma forma para tree:

tree -C | less -R
Patrick
fonte