Tuyauter la sortie de ls ou d'arbre pour perdre moins de couleurs?

12

treeet lspeut distinguer les types de fichiers en coloriant les noms de fichiers différemment.

treeet lsgénère souvent une longue liste de fichiers (y compris les répertoires), donc je redirige la sortie stdout vers less.

Mais lessne préserve pas les couleurs. Comment pouvons-nous lui faire afficher des couleurs ou d'autres façons?

Je viens de voir la liste des liens, mais la tuyauterie vers less -Rou less -rne fonctionne pas. Mon système d'exploitation est Ubuntu 12.04. lessest la version 444: 09 juin 2011.

Tim
la source
1
@JosephR. l'autre question est à moitié liée mais pas en double. Ici, nous parlons ls(pas tree) pour lesquels certaines implémentations doivent être obligées de forcer la sortie couleur lorsque la sortie ne va pas à un terminal (en plus d' less -Rêtre nécessaire)
Stéphane Chazelas
As-tu essayé tree -C | less -R? L' -Coption est l'équivalent d'un arbre de moins --color=always, je pense (au moins cela fonctionne pour moi, sur Ubuntu 12.04).
steeldriver
@steeldriver merci. Ça marche. treeavec et sans -Csortie seule toujours en couleurs, mais pourquoi sont-ils différents lorsqu'ils sont utilisés avec less?
Tim
2 raisons: @ Tim 1. lesssupprime les couleurs par défaut , à moins que vous lui donnez l' -Roption, qui lui dit de le laisser dans et 2. treeet lsainsi que d' autres programmes tournent habituellement la coloration quand ils détectent leur production va à un autre programme (comme less) au lieu de directement sur votre terminal, sauf si vous forcez la coloration avec -Cou --color=always.
jw013
2
De quoi parle cette liste chaînée?
Anthon

Réponses:

15

Je vais supposer que vous utilisez ls --color=auto, ce qui indique lsd'utiliser la couleur en mode «automatique». Le mode «automatique» indique lesspour voir si STDOUT est un terminal, et si c'est le cas, utilisez la couleur, sinon n'utilisez pas la couleur. Lorsque vous dirigez lsvers less, STDOUT n'est pas un terminal, il est connecté à STDIN de less, qui est un tuyau normal.

La solution, utilisez ls --colorou ls --color=always.

Mais maintenant, cela conduit à un autre problème potentiel. Selon votre less, il peut ne pas afficher la couleur, mais afficher les codes d'échappement à la place. La solution est d'utiliser less -R. Cela indique lessde passer par les codes d'échappement pour les échappements de couleur ANSI. Vous ne voulez pas l'utiliser -rcar cela entraînera des problèmes avec les longues lignes qui s'enroulent, car moins ne calcule pas correctement la longueur de la ligne.

Solution si complète:

ls --color | less -R

De même pour tree:

tree -C | less -R
Patrick
la source