lsまたはtreeの出力をlessにパイプすると色が失われますか?

lsまたはtreeの出力をlessにパイプすると色が失われますか?

treeまた、lsファイル名を異なる色で塗りつぶすことで、ファイル形式を区別することができます。

treeそしてlsしばしば長いファイルのリスト(ディレクトリを含む)を出力するので、stdout出力をless

しかし、less色は維持されません。どのように色を表示できますか?それとも別の方法がありますか?

ちょうどリンクされたリストを見たが、パイピングless -Rまたはless -r動作しません。私のオペレーティングシステムはUbuntu 12.04です。lessバージョン444:2011年6月9日。

答え1

私はあなたが「自動」モードで色を使うように指示するls --color=autoを使用していると仮定します。ls「自動」モードはlsSTDOUTが端末であることを確認し、そうであれば色を使用し、そうでなければ色を使用しないことを示します。lsにパイプを接続すると、lessSTDOUTは端子ではなくless通常のパイプであるSTDINに接続されます。

回避策ls --colorは、またはls --color=always

今、これは別の潜在的な問題につながります。場合によっては、less色が表示されず、エスケープコードが表示されることがあります。解決策はを使用することですless -R。これはless、ANSIカラーエスケープのエスケープコードを渡すように指示します。-rlessは行の長さを正しく計算できないため、長い改行に問題が発生する可能性があるため、使用したくありません。

これらの完璧なソリューションは次のとおりです。

ls --color | less -R

同じtree:

tree -C | less -R

関連情報