Leiten Sie die Ausgabe von ls oder tree so, dass weniger Farben verloren gehen?

12

treeund lskann Dateitypen unterscheiden, indem Dateinamen unterschiedlich gefärbt werden.

treeund lsoft eine lange Liste von Dateien (einschließlich Verzeichnissen) ausgeben, so leite ich die stdout-Ausgabe an less.

Aber lessnicht beibehalten , die Farben. Wie können wir es dazu bringen, Farben zu zeigen, oder auf alternative Weise?

Habe gerade die verknüpfte Liste gesehen, aber die Weiterleitung zu less -Roder less -rfunktioniert nicht. Mein Betriebssystem ist Ubuntu 12.04. lessist Version 444: 09.06.2011.

Tim
quelle
1
@ JosephR. Die andere Frage ist halbbezogen, aber kein Duplikat. Wir sprechen hier von ls(nicht tree), für die einige Implementierungen angewiesen werden müssen, um die Farbausgabe zu erzwingen, wenn die Ausgabe nicht an ein Terminal less -R
gesendet wird
Hast du es versucht tree -C | less -R? Die -COption ist --color=always, glaube ich, gleichbedeutend mit der von less (zumindest für Ubuntu 12.04).
Steeldriver
@steeldriver danke. Es klappt. treemit und ohne -Callein immer in Farben ausgeben, aber warum unterscheiden sie sich bei der Verwendung mit less?
Tim
@ Tim 2 Gründe: 1. lessEntfernt die Farben standardmäßig , wenn Sie es das geben -ROption, die es zu verlassen erzählt in, und 2 treeund lsund andere Programme der Regel wiederum Färbung aus , wenn sie ihren Ausgang erkennen an ein anderes Programm wird (wie less) statt direkt an Ihr Terminal, es sei denn, Sie erzwingen die Einfärbung mit -Coder --color=always.
JW013
2
Was ist diese verknüpfte Liste, über die Sie schreiben?
Anthon

Antworten:

15

Ich gehe davon aus, dass Sie verwenden ls --color=auto, die lsFarbe im "automatischen" Modus verwenden sagt . Im Modus 'Automatisch' wird lessangezeigt, ob STDOUT ein Terminal ist. Verwenden Sie in diesem Fall Farbe. Andernfalls verwenden Sie keine Farbe. Wenn Sie Rohr lsin lessSTDOUT kein Terminal ist, ist es zu STDIN von verbunden less, die ein normales Rohr ist.

Die Lösung verwenden ls --coloroder ls --color=always.

Dies führt jedoch jetzt zu einem weiteren potenziellen Problem. Abhängig von Ihrer lessEinstellung wird möglicherweise nicht die Farbe, sondern die Escape-Codes angezeigt. Die Lösung ist zu verwenden less -R. Dies weist Sie lessan, die Escape-Codes für ANSI-Farb-Escapes zu durchlaufen. Sie sollten diese Option nicht verwenden, -rda dies Probleme mit langen umlaufenden Zeilen verursacht, da weniger die Zeilenlänge nicht richtig berechnet.

Also volle Lösung:

ls --color | less -R

Ähnlich für tree:

tree -C | less -R
Patrick
quelle