有色的FIND输出?


15

是否可以从find命令获得彩色输出?也就是说,在找到的每个项目的路径中,目录为蓝色,可执行脚本为绿色,等等。我正在使用GNU findutils的 4.4.2版本。

编辑-为了明确起见,每个结果都将像这样突出显示:

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

(例如,如果执行find . -type f)。


我写了一个几乎兼容的替代品bfs,它具有以下功能:github.com/tavianator/bfs
Tavian Barnes

Answers:


10

更新:我添加了一个新的(不同的)脚本... 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

这是Ignacio启发的新脚本:)

如果您将单个路径用作的第一个arg,则此方法有效find
UNTESTED在这个脚本的问题。这只是概念。
一个问题是:符号链接... 浑水 ......
作为-是,它打印的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 

您忘了说您grcatgrc软件包中引用了该实用程序:)刚开始时,我在理解您的要求时遇到了一些困难。
enzotib

我真的错过了OP为不同类型的文件使用不同颜色的事实。
enzotib 2011年

哇。太多的工作对我来说不值得
Kolob Canyon

6

您可以-exec用来完成大部分操作(我的解决方案不会对目录部分进行不同的着色)。如果你-print在你的find命令,通过更换-exec ls --color -d; 如果您使用的是隐式打印,请添加它。假设您ls支持该--color选项。

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

1
我不确定谁对此表示支持,但我不相信他们已经阅读完了这个问题(不是说我的回答应该得到相应的反对)……
Ignacio Vazquez-Abrams

4

这只会对路径和文件名使用两种颜色的高亮显示,而不会对按文件类型进行显示 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端子命令序列中的 “设置图形渲染”部分。


-1

我喜欢-exec的想法。我用它来创建此功能:

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

这似乎不会产生颜色..?
Leo Ufimtsev '17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.