Цветной НАЙТИ выход?

14

Можно ли получить цветной вывод команды find ? То есть в пути каждого найденного элемента каталоги отображаются синим цветом, исполняемые сценарии - зеленым, и так далее? Я использую версию 4.4.2 GNU findutils .

Изменить - чтобы уточнить, каждый результат будет выделен следующим образом:

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

(если, например, выполняется find . -type f).

Уэс
источник
Я написал замену, в основном совместимую с поиском, bfsкоторая имеет такую ​​функциональность: github.com/tavianator/bfs
Тавиан Барнс,

Ответы:

10

ОБНОВЛЕНИЕ: я добавил новый (другой) сценарий ... 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 
Peter.O
источник
Вы забыли сказать, что имеете в виду grcatутилиту из grcпакета :) В начале у меня были некоторые трудности с пониманием того, что вы говорите.
энзотиб
Я действительно упустил тот факт, что ОП хотят разные цвета для разных типов файлов.
энзотиб
Вау. Слишком много работы, чтобы стоить это для меня
Каньон Колоб
6

Вы могли бы использовать, -execчтобы сделать большую часть этого (мое решение не окрашивает часть каталога по-другому). Если у вас есть -printв вашей findкоманде, заменить его на -exec ls --color -d; если вы используете неявную печать, добавьте это. Это предполагает, что вы lsподдерживаете --colorопцию.

find . -exec ls --color -d {} \;
Тим Кеннеди
источник
1
Я не уверен, кто проголосовал за это, но я не верю, что они закончили читать вопрос (хотя я не говорю, что этот ответ заслуживает соответствующего отрицательного голоса) ...
Игнасио Васкес-Абрамс
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,
и в разделе «Графика Set Rendition» в командных последовательностей ANSI терминала .

Volker Siegel
источник
-1

Мне понравилась идея -exec. Я использовал это, чтобы создать эту функцию:

function ff {
    find . -name $1 -exec ls -G -d {} \;
}
IBootstrap
источник
Это, кажется, не дает цвета ..?
Лев Уфимцев