UPDATE: adicionei um novo script (diferente) ...Ignacio Vazquez-Abrams tinha um ponto: a pergunta realmente pede executable scripts are green, et cetera... ok ... você encontrará um script (protótipo) no final desta resposta.
Esta primeira seção (original) é sobre grc e grcat.
Isso deve funcionar; grc... (como o enzotib indicou .. O nome do pacote é grc... O sub-utilitário usado no exemplo égrcat
generic colouriser for everything
generic colouriser, can be used to colourise logfiles,
output of commands, arbitrary text....
configured via regexp's.
O exemplo a seguir imprime
./ em magenta
bin/cpp/ em ciano
bigint em branco arrojado
Ainda não resolvi completamente como ele lida com o arquivo de configuração, mas parece que ele fará o que você deseja (depois de domá-lo) .. por exemplo. para um arquivo sem subdiretório e a sequência de cores parece não estar na mesma sequência que as expressões.
Presumo que seja possível (mas estou um pouco ocupado no momento) ...
echo "# my config file
regexp=(\./)(.*/)([^/]+)
colours=bold white,magenta,cyan
">$HOME/.grc/findhi
find . -maxdepth 3 -name '*' | grcat findhi
Aqui está o novo script inspirado em Ignacio :)
Isso funciona se você usar um único caminho como o primeiro argumento para find.
Existem problemas não previstos neste script. É apenas conceito.
Uma questão é: Links simbólicos ... águas turvas ...
No estado atual , ele imprime um ERRORquando encontra um tipo desconhecido (por exemplo, um link simbólico) e, em seguida, continua o processamento além disso.
Obrigado enzotibpelos tputexemplos.
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
bfsque tem essa funcionalidade: github.com/tavianator/bfs