रंगीन उत्पादन प्राप्त करें?


15

क्या खोज आदेश से रंगीन आउटपुट प्राप्त करना संभव है ? यही है, प्रत्येक पाए गए आइटम के मार्ग में, निर्देशिकाएं नीली हैं, निष्पादन योग्य स्क्रिप्ट हरे हैं, वगैरह? मैं GNU खोज के 4.4.2 संस्करण का उपयोग कर रहा हूं ।

संपादित करें - स्पष्ट करने के लिए, प्रत्येक परिणाम इस तरह हाइलाइट किया जाएगा:

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

यहाँ नई इग्नासियो प्रेरित स्क्रिप्ट है :)

यह काम करता है यदि आप पहले arg to के रूप में किसी एक पथ का उपयोग करते हैं find। इस स्क्रिप्ट में UNTESTED समस्याएँ
हैं । यह केवल अवधारणा है। एक मुद्दा है: प्रतीकात्मक कड़ियाँ ... गन्दा पानी ... जैसा कि यह एक अज्ञात प्रकार (जैसे - एक प्रतीकात्मक कड़ी) का सामना करने पर प्रिंट करता है , और फिर उस अतीत को संसाधित करना जारी रखता है। उदाहरण के लिए धन्यवाद ।

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 

आप यह कहना भूल गए कि आप पैकेज grcatसे उपयोगिता की बात कर रहे हैं grc:) शुरुआत में मुझे यह समझने में कुछ कठिनाइयाँ आईं कि आप क्या कह रहे हैं।
enzotib

मैं वास्तव में इस तथ्य से चूक गया कि ओपी विभिन्न प्रकार की फाइलों के लिए एक अलग रंग चाहता है।
enzotib 14

वाह। मेरे लिए इसके लायक होने के लिए बहुत काम
कोलोब कैन्यन

6

आप इसका -execअधिकांश उपयोग कर सकते हैं (मेरा समाधान अलग से निर्देशिका भाग को रंग नहीं देता है)। यदि आपके पास -printआपकी findकमान है, तो इसे बदलें -exec ls --color -d; यदि आप अंतर्निहित मुद्रण का उपयोग कर रहे हैं, तो उसे जोड़ें। यह आपके विकल्प lsका समर्थन करता --colorहै।

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

1
मुझे यकीन है कि जो इस upvoted नहीं कर रहा हूँ, लेकिन मैं नहीं मानता कि वे प्रश्न पढ़ने (नहीं है कि मैं कह रहा हूँ इस जवाब हालांकि एक इसी downvote हकदार) समाप्त हो गया ...
इग्नेसियो वेज़क्वेज़-अब्राम

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,
और ANSI टर्मिनल कमांड क्रम में "सेट ग्राफिक्स रेंडिशन" अनुभाग देखें ।


-1

मुझे -exec का विचार पसंद आया। मैंने इसका उपयोग इस फंक्शन को बनाने के लिए किया है:

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

यह रंग का उत्पादन नहीं लगता है ..?
सिंह उफिम्त्सेव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.