Kolorowe wyjście FIND?

15

Czy można uzyskać kolorowe wydruki z polecenia find ? Oznacza to, że na ścieżce każdego znalezionego elementu katalogi są niebieskie, skrypty wykonywalne są zielone, i tak dalej? Używam wersji 4.4.2 findutils GNU .

Edycja - aby wyjaśnić, każdy wynik zostanie wyróżniony w następujący sposób:

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

(jeśli na przykład wykonanie find . -type f).

wes
źródło
Napisałem zamiennik kompatybilny głównie z bfsfunkcją znajdowania,
Barnes

Odpowiedzi:

10

AKTUALIZACJA: Dodałem nowy (inny) skrypt ... Ignacio Vazquez-Abrams miał rację: pytanie naprawdę executable scripts are green, et ceteranasuwa pytanie ... ok ... znajdziesz taki (prototypowy) skrypt na końcu tej odpowiedzi.


Ta pierwsza (oryginalna) sekcja dotyczy grci grcat.

To powinno działać; grc... (jak zauważył enzotib . Nazwa pakietu to grc... Podrzędnym narzędziem użytym w tym przykładzie jestgrcat

generic colouriser for everything

generic colouriser, can be used to colourise logfiles,
output of commands, arbitrary text....
configured via regexp's.

Zostanie wydrukowany następujący przykład

  • ./ w kolorze magenta
  • bin/cpp/ w cyjanie
  • bigint w odważnej bieli

Nie w pełni ustaliłem, jak obsługuje plik konfiguracyjny, ale wygląda na to, że zrobi to, co chcesz (kiedy go oswoisz) .. np. dla pliku bez podkatalogu, a sekwencja kolorów wydaje się nie być w tej samej sekwencji, co wyrażenia.
Zakładam, że jest to możliwe (ale w tej chwili jestem trochę zajęty) ...

echo "# my config file
regexp=(\./)(.*/)([^/]+)
colours=bold white,magenta,cyan
">$HOME/.grc/findhi

find . -maxdepth 3 -name '*' | grcat findhi

Oto nowy skrypt inspirowany Ignacio :)

Działa to, jeśli jako pierwszy argument użyjesz pojedynczej ścieżki find.
W tym skrypcie występują problemy NIEZBADANE . To tylko koncepcja.
Jednym z zagadnień jest: dowiązania symboliczne ... mętne wody ...
W tej chwili drukuje, ERRORgdy napotka nieznany typ (np. Dowiązanie symboliczne), a następnie kontynuuje przetwarzanie.
Dzięki enzotibza tputprzykłady.

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
źródło
Zapomniałeś powiedzieć, że masz na myśli grcatnarzędzie z grcpakietu :) Na początku miałem trudności ze zrozumieniem, co mówisz.
enzotib,
Naprawdę brakowało mi faktu, że OP chce innego koloru dla różnych typów plików.
enzotib,
Łał. Zbyt wiele pracy, by było dla mnie tego warte
Kanion Kolob
6

Przydałbyś -execsię do większości tego (moje rozwiązanie nie zmienia koloru części katalogu inaczej). Jeśli masz -printw swoim findpoleceniu, zastąp go -exec ls --color -d; jeśli używasz drukowania niejawnego, dodaj to. Zakłada się, że lsobsługuje tę --coloropcję.

find . -exec ls --color -d {} \;
Tim Kennedy
źródło
1
Nie jestem pewien, kto głosował na to, ale nie sądzę, aby skończyli czytać pytanie (nie twierdzę jednak, że ta odpowiedź zasługuje na odpowiednią opinię negatywną) ...
Ignacio Vazquez-Abrams
4

Czyni to tylko dwukolorowe wyróżnienie ścieżki i nazwy pliku, a nie typ dla poszczególnych plików ls:

Skonfiguruj kolory grepwyjściowe we właściwy sposób dla dopasowanej i niedopasowanej części i dopasuj nazwę pliku:

$ export GREP_COLORS="sl=0;33;49:ms=1;34;49"
$ find /etc/ -type f | head | grep --color=always '^\|[^/]*$'


w kolorze grep

Możesz nie chcieć zastąpić zmiennej GREP_COLORS, więc ustaw ją tylko dla grep:

$ find /etc/ -type f | head | GREP_COLORS="sl=0;33;49:ms=1;34;49" grep --color=always '^\|[^/]*$'

(Definicje z przestarzałej zmiennej GREP_COLORmają mniejszy priorytet niż te w GREP_COLORS)

Dla kodów kolorów, zobaczyć colortest-16z pakietu colortest,
a punkt „Zestaw graficzne odwzorowanie” w ANSI sekwencji komend terminala .

Volker Siegel
źródło
-1

Podobał mi się pomysł -exec. Użyłem go do stworzenia tej funkcji:

function ff {
    find . -name $1 -exec ls -G -d {} \;
}
IBootstrap
źródło
Wydaje się, że to nie daje koloru ..?
Lew Ufimcew