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).


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 

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 {} \;

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 .


-1

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

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

Wydaje się, że to nie daje koloru ..?
— Lew Ufimcew
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.