ОБНОВЛЕНИЕ: я добавил новый (другой) сценарий ... 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