Renkli FIND çıktısı?


15

Ondan renkli çıktısını almak mümkün mü bulmak komutu? Yani, bulunan her öğenin yolunda, dizinler mavi, yürütülebilir komut dosyaları yeşil, vb. GNU findutils 4.4.2 sürümünü kullanıyorum .

Düzenle - Açıklığa kavuşturmak için her sonuç şu şekilde vurgulanır:

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

(örneğin, yürütülüyorsa find . -type f).


Ben bfsbu işlevselliğe sahip denilen çoğunlukla bulmak uyumlu bir yedek yazdım
Tavian Barnes

Yanıtlar:


10

GÜNCELLEME: Yeni (farklı) bir script ekledim ... Ignacio Vazquez-Abrams bir anlamı vardı: Soru gerçekten soruyor executable scripts are green, et cetera.. tamam ... bu cevabın sonunda böyle bir (prototip) script bulacaksınız.


Bu ilk (orijinal) bölüm grcve ile ilgilidir grcat.

Bu çalışmalı; grc... ( enzotibin işaret ettiği gibi) Paket adı grc... Örnekte kullanılan alt yardımcı programgrcat

generic colouriser for everything

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

Aşağıdaki örnek yazdırılıyor

  • ./ eflatun
  • bin/cpp/ camgöbeği
  • bigint koyu beyaz

Ben tam olarak henüz yapılandırma dosyasını ele nasıl dizilmiş değil, ama bu (ne zaman bir kez sen tame) istediğinizi yapacak gibi görünüyor .. örn. alt dizini olmayan bir dosya için ve renk dizisi ifadelerle aynı sırada görünmüyor.
Mümkün olduğunu düşünüyorum (ama şu anda biraz meşgulüm) ...

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

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

İşte Ignacio'dan ilham alan yeni senaryo :)

Bu, ilk argüman olarak tek bir yol kullanırsanız çalışır find. Bu komut dosyasında SINAVSIZ sorunlar
var . Bu sadece bir kavram. Bir sorun şudur: Sembolik Bağlantılar ... bulanık sular ... Olduğu gibi, bilinmeyen bir türle (örneğin sembolik bir bağlantı) karşılaştığında bir baskı yazdırır ve sonra bunu işlemeye devam eder. Örnekler için teşekkürler .

ERROR
enzotibtput

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 

Paketten grcatyardımcı programa atıfta bulunduğunuzu söylemeyi unuttunuz grc:) Başlangıçta ne söylediğini anlamakta zorlandım.
enzotib

OP'nin farklı dosya türleri için farklı bir renk istediği gerçeğini gerçekten kaçırdım.
enzotib

Vay. Benim için değer olmak için çok fazla iş
Kolob Kanyonu

6

-execBunların çoğunu yapmak için kullanabilirsiniz (benim çözümüm dizin bölümünü farklı renklendirmez). Eğer varsa -printsizin içinde findkomuta, bunu tarafından yerine -exec ls --color -d; örtülü baskıyı kullanıyorsanız, bunu ekleyin. Bu seçeneklerinizin lsdesteklendiğini varsayar --color.

find . -exec ls --color -d {} \;

1
Bunu kimin onaylayacağından emin değilim, ancak soruyu okumayı bitirdiklerine inanmıyorum (bu cevabın karşılık gelen bir düşüşü hak ettiğini söylemiyorum) ...
Ignacio Vazquez-Abrams

4

Bu, yalnızca dosya ve dosya adı için iki renkli vurgu yapar, dosya türü başına değil ls:

grepÇıktı renklerini eşleşen ve eşleşmeyen parça için doğru şekilde yapılandırın ve dosya adıyla eşleşin:

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


Ekran-grep renkli

Değişkenin üzerine yazmak istemeyebilirsiniz GREP_COLORS, bu nedenle yalnızca aşağıdakiler için ayarlayın grep:

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

(Kullanımdan kaldırılmış değişkenin tanımları, GREP_COLORöncekilerden daha az önceliğe sahiptir GREP_COLORS)

Renk kodları için bkz colortest-16paketinden colortest,
ve kesit "set grafik teslimat" ANSI Terminal komut sekansları .


-1

-Exec fikrini beğendim. Bu işlevi oluşturmak için kullandım:

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

Bu renk üretmiyor gibi görünüyor ..?
Leo Ufimtsev
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.