カラーFIND出力?


13

findコマンドから色付きの出力を取得することは可能ですか?つまり、見つかった各アイテムのパスでは、ディレクトリは青、実行可能なスクリプトは緑などです。GNU findutilsのバージョン4.4.2を使用しています

編集-明確にするために、各結果は次のように強調表示されます。

./path/to/file.sh
  ^    ^  ^
  |    |  L green
   blue

(たとえば、実行する場合find . -type f)。


私は主に-検索互換と呼ばれる代替書いたbfs:この機能を持っているgithub.com/tavianator/bfs
Tavianバーンズ

回答:


9

更新:新しい(異なる)スクリプトを追加しました... Ignacio Vazquez-Abrams 要点がありました:質問は本当にexecutable scripts are green, et cetera..わかりました...この答えの最後にそのような(プロトタイプ)スクリプトがあります。


この最初の(オリジナルの)部分は、約あるgrcgrcat

これは動作するはずです。grc...(enzotibが指摘したように..パッケージ名はgrc... です。例で使用されているサブユーティリティは、grcat

generic colouriser for everything

generic colouriser, can be used to colourise logfiles,
output of commands, arbitrary text....
configured via regexp's.

次の例は印刷します

  • ./ マゼンタで
  • bin/cpp/ シアンで
  • bigint 大胆な白で

私はまだ設定ファイルをどのように処理するかを完全には整理していませんが、これはあなたが望むことをするように見えます(一度あなたがそれを飼いならす).. サブディレクトリのないファイルの場合、色のシーケンスは式と同じシーケンスではないようです。
私はそれが可能であると思います(しかし、私は現時点では少し忙しいです)...

echo "# my config file
regexp=(\./)(.*/)([^/]+)
colours=bold white,magenta,cyan
">$HOME/.grc/findhi

find . -maxdepth 3 -name '*' | grcat findhi

以下は、イグナシオにヒントを得た新しいスクリプトです。

これは、の最初の引数として単一のパスを使用する場合に機能しますfind。このスクリプトに
未検証の問題があります。それは概念です。
1つの問題は次のとおりです。シンボリックリンク... 濁った海 ...
として-で、それは印刷しERROR、それは未知のタイプ(例:シンボリックリンクを。)遭遇した場合、その後、という過去の処理を続行します。
おかげenzotibためのtput例。

dircol=$(tput bold ;tput setaf 4)
coloff=$(tput sgr0)

root="$HOME"       # define path here, not in 'find` arg
root="${root:-.}"  # default to '.'
root="${root%/}/"  # add trailing '/'
#
find "$root" -maxdepth 1 -name '*' -printf "%y %P\n" | 
  while read -r line ;do
    case $line in 
       d   ) printf "%s\n" "$dircol$root$coloff";;  
       d\ *) printf "%s\n" "$dircol$root${line:2}$coloff";;  
       f\ *) l="$root${line:2}"
             d="${l%/*}/"
             f="${l##*/}"
             cd -P "$d" 
             printf "%s" "$dircol$d$coloff"  
             ls --color=always -R1 "$f"
             cd - >/dev/null
             ;; 
          *) printf "ERROR - type not yet catered for\n";;  
    esac
  done 

パッケージgrcatからユーティリティを参照していると言うのを忘れていましたgrc:)最初は、あなたが言っていることを理解するのが困難でした。
エンゾチブ

OPがファイルの種類ごとに異なる色を必要としているという事実を本当に見逃しました。
enzotib

ワオ。私にとって価値のある仕事が多すぎる
Kolob Canyon

6

-execそのほとんどを使用することができます(私のソリューションでは、ディレクトリ部分に異なる色を付けていません)。あなたが持っている場合は-print、あなたの中findのコマンドでそれを置き換えます-exec ls --color -d。暗黙的な印刷を使用している場合は、それを追加します。これはls--colorオプションがサポートされていることを前提としています。

find . -exec ls --color -d {} \;

1
私は確かに誰がこれをupvotedないんだけど、私は(私はこの答えはかかわらず、対応するdownvoteに値する言っていることではない)、彼らは質問を読み終え信じていません...
イグナシオバスケス-エイブラムス

4

これは、ファイルタイプごとではなく、パスとファイル名の2色の強調表示のみを行います ls

grep一致する部分と一致しない部分に対して正しい方法で出力の色を構成し、ファイル名を一致させます。

$ export GREP_COLORS="sl=0;33;49:ms=1;34;49"
$ find /etc/ -type f | head | grep --color=always '^\|[^/]*$'


screen-grep-colored

変数を上書きしたくない場合がありますGREP_COLORSので、以下にのみ設定してgrepください。

$ find /etc/ -type f | head | GREP_COLORS="sl=0;33;49:ms=1;34;49" grep --color=always '^\|[^/]*$'

(非推奨の変数による定義のGREP_COLOR優先度はの定義よりも低くなっていますGREP_COLORS

カラーコードについてcolortest-16は、パッケージからcolortest
およびANSI端末コマンドシーケンスの「グラフィックレンディションの設定」セクションを参照してください。


-1

-execのアイデアが気に入りました。この関数を作成するために使用しました:

function ff {
    find . -name $1 -exec ls -G -d {} \;
}

これは色を生成しないようです..?
レオウフィムツェフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.