Кольоровий вихід?


15

Чи можна отримати кольоровий вихід із команди find ? Тобто на шляху кожного знайденого елемента каталоги блакитного кольору, виконавчі скрипти - зелені, тощо? Я використовую версію 4.4.2 GNU Findutils .

Редагувати - Щоб уточнити, кожен результат буде виділено таким чином:

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

(якщо, наприклад, виконання find . -type f).


Я написав заміну, сумісну в основному, для пошуку, bfsяка має цю функціональність: github.com/tavianator/bfs
Tavian Barnes

Відповіді:


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 

Ви забули сказати, що ви посилаєтесь на grcatутиліту з grcпакета :) На початку у мене виникли труднощі зрозуміти, що ви говорите.
enzotib

Я дуже пропустив той факт, що ОП хочуть іншого кольору для різних типів файлів.
enzotib

Ого. Занадто багато роботи для того, щоб воно того варте для мене
Колонь Каньйон

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_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 терміналу .


-1

Мені сподобалась ідея -exec. Я використовував її для створення цієї функції:

function ff {
    find . -name $1 -exec ls -G -d {} \;
}

Здається, це не дає кольору ..?
Лев Уфімцев
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.