是否有可能获得彩色输出寻找命令?也就是说,在每个找到的项目的路径中,目录是蓝色的,可执行脚本是绿色的,等等?我使用的是 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
......好吧......你会在这个答案的末尾找到这样一个(原型)脚本。
第一个(原始)部分是关于grc
和 的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
。
有未经测试这个脚本中的问题。这只是概念。
一个问题是:符号链接...浑水...
按原样,ERROR
当遇到未知类型(例如符号链接)时,它会打印 an ,然后继续处理该类型。
感谢您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
答案2
您可以用来-exec
完成大部分工作(我的解决方案不会以不同的方式对目录部分进行着色)。如果-print
您的命令中有find
,请将其替换为-exec ls --color -d
;如果您使用隐式打印,请添加它。这假设您ls
支持该--color
选项。
find . -exec ls --color -d {} \;
答案3
这仅对路径和文件名进行双色突出显示,而不对每个文件类型进行突出显示 ls
:
grep
以正确的方式配置匹配和不匹配部分的输出颜色,并匹配文件名:
$ export GREP_COLORS="sl=0;33;49:ms=1;34;49"
$ find /etc/ -type f | head | grep --color=always '^\|[^/]*$'
您可能不想覆盖该变量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
延伸至彼得·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
}
首先解析 thelocation
和--maxdepth
the find
will work,然后列出它的颜色。
它使用以下形式的参数[depth [root folder]]
使用示例:
lr
lr 5
lr 2 Documents