ОБНОВЛЕНИЕ: я добавил новый (другой) сценарий ... Ignacio Vazquez-Abrams имел смысл: вопрос действительно спрашивает executable scripts are green, et cetera... хорошо ... вы найдете такой (прототип) сценарий в конце этого ответа.
Этот первый (оригинальный) раздел о grcи grcat.
Это должно работать; 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.
В этом скрипте есть НЕПРОВЕРЕННЫЕ проблемы. Это всего лишь концепция.
Одна проблема: символические ссылки ... мутные воды ...
Как есть, она печатает, 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
bfsкоторая имеет такую функциональность: github.com/tavianator/bfs