カラーFIND出力?

カラーFIND出力?

カラー出力は可能ですか?探す注文する?つまり、見つかった各エントリのパスでディレクトリは青色、実行可能なスクリプトは緑色などですか?バージョン4.4.2を使用しています。GNU findutils

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

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

(例:実行されている場合find . -type f

答え1

修正する:私は新しい(他の)スクリプトを追加しました...ツイストIgnacio Vazquez-Abrams で:質問はexecutable scripts are green, et cetera...まあ...この答えの終わりにそのような(プロタイプ)スクリプトを見つけることができます。


最初の(元の)部分はgrcsumsに関するものですgrcat

これはうまくいきますgrc...(例:エンゾチップすでに指摘しています。パッケージ名は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未知のタイプ(シンボリックリンクなど)が見つかった場合は、印刷してそのタイプを処理し続けます。例を聞いてくれて
ありがとう。enzotibtput

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 

答え2

-execほとんどの操作を完了するために使用できます(私の解決策はディレクトリセクションの色を別々に指定しません)。-printコマンドにある場合findに置き換えてください-exec ls --color -d。暗黙的な印刷を使用している場合は追加してください。これは、あなたがlsこの--colorオプションをサポートしていると仮定します。

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

答え3

これは、各ファイル形式ではなく、パスとファイル名に対して2色のハイライトのみを実行します。 ls:

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

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


スクリーンのgrepの色

おそらくこの変数をオーバーライドしたくないので、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端末コマンドシーケンス

答え4

まで拡張答え:Peter O。:

.bashrcこの関数定義をまたはに追加できます.bash_aliases

lrリストの再帰を意味しますが、好きなように名前を付けることができます)

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


   case $# in
    2)
     root=$2
     depth=$1
     ;;
    1)
     root="."
     depth=$1
     ;;
    0)
     root="."
     depth=2
     ;;   
    *)
     echo "Specify only upto 2 arguments: [depth [root folder]]"
     return
     ;;
   esac

   root="${root%/}/"  # add trailing '/'
   
   find "$root" -maxdepth "$depth" -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
            ;; 
        # l\ *) printf "This is link.\n";;
        l\ *) l="$root${line:2}"
            d="${l%/*}/"
            f="${l##*/}"            
            cd -P "$d" 
            printf "%s" "$dircol$d$coloff"  
            ls --color=always -d1 "$f" | tr -d '\n' 
            printf " -> "
            readlink -f "$f"
            cd - >/dev/null
            ;; 
           *) printf "ERROR - type not yet catered for\n";;  
       esac
    done
}

まずを解析するとうまくいくlocationでしょ--maxdepthfind。次に、その色をリストします。

次の形式のパラメータを使用します。[depth [root folder]]

使用例:

lr 
lr 5
lr 2 Documents

関連情報