เอาต์พุต FIND สี


15

เป็นไปได้หรือไม่ที่จะได้รับเอาต์พุตสีจากคำสั่งfind ? นั่นคือในเส้นทางของรายการที่พบแต่ละไดเรกทอรีเป็นสีน้ำเงินสคริปต์ที่ปฏิบัติการได้เป็นสีเขียวและอื่น ๆ ฉันใช้เวอร์ชัน 4.4.2 ของfindutils GNU

แก้ไข - หากต้องการชี้แจงแต่ละผลลัพธ์จะถูกเน้นเช่นนี้:

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

(ถ้าเช่นการดำเนินการfind . -type f)


ฉันเขียนการแทนที่ที่เข้ากันได้กับการค้นหาส่วนใหญ่ที่เรียกbfsว่ามีฟังก์ชั่นนี้: github.com/tavianator/bfs
Tavian Barnes

คำตอบ:


10

UPDATE:ฉันได้เพิ่มสคริปต์ใหม่ (แตกต่าง) ... Ignacio Vazquez-Abrams มีประเด็น: คำถามที่ถามจริงๆexecutable scripts are green, et cetera.. โอเค ... คุณจะพบสคริปต์ (ต้นแบบ) เช่นนี้ในตอนท้ายของคำตอบนี้


นี่เป็นครั้งแรก (เดิม) ส่วนเป็นเรื่องเกี่ยวกับและ grcgrcat

สิ่งนี้น่าจะใช้ได้ 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 ตัวหนาสีขาว

ฉันยังไม่ได้เรียงอย่างเต็มที่ว่าจะจัดการกับไฟล์กำหนดค่าอย่างไร แต่ดูเหมือนว่ามันจะทำสิ่งที่คุณต้องการ (เมื่อคุณเชื่อง) .. เช่น สำหรับไฟล์ที่ไม่มี sub-dir และลำดับสีดูเหมือนว่าจะไม่อยู่ในลำดับเดียวกันกับนิพจน์
ฉันคิดว่ามันเป็นไปได้ (แต่ฉันยุ่งเล็กน้อยในขณะนี้) ...

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

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

นี่คือสคริปต์ที่ได้รับแรงบันดาลใจจาก Ignacioใหม่:)

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

ฉันพลาดความจริงที่ว่า OP ต้องการสีที่ต่างกันสำหรับไฟล์ประเภทต่างๆ
enzotib

ว้าว. งานมากเกินไปที่จะคุ้มค่าสำหรับฉัน
Kolob Canyon

6

คุณสามารถใช้-execเพื่อทำส่วนใหญ่ (โซลูชันของฉันไม่สีส่วนไดเรกทอรีแตกต่างกัน) ถ้าคุณมี-printของคุณในfindคำสั่งแทนที่โดย-exec ls --color -d; หากคุณใช้การพิมพ์โดยนัยให้เพิ่มมันเข้าไป สิ่งนี้จะถือว่าตัวเลือกของคุณlsรองรับ--color

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

1
ฉันไม่แน่ใจว่าใครเป็นผู้ผลักดันเรื่องนี้ แต่ฉันไม่เชื่อว่าพวกเขาอ่านคำถามเสร็จแล้ว (ไม่ใช่ว่าฉันกำลังตอบคำถามนี้ว่าสมควรได้รับ downvote ที่เกี่ยวข้อง) ...
Ignacio Vazquez-Abrams

4

นี่เป็นเพียงการเน้นสองสีสำหรับพา ธ และชื่อไฟล์ไม่ใช่สิ่งต่อไฟล์ ls:

กำหนดค่าสีของgrepเอาต์พุตอย่างถูกต้องสำหรับชิ้นส่วนที่จับคู่และไม่ตรงกันและจับคู่ชื่อไฟล์:

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


หน้าจอ grep สี

คุณอาจไม่ต้องการเขียนทับตัวแปร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,
และส่วน "การตั้งค่ากราฟิก Rendition" ในANSI ลำดับคำสั่งมินัล


-1

ฉันชอบแนวคิด -exec ฉันใช้มันเพื่อสร้างฟังก์ชั่นนี้:

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

ดูเหมือนจะไม่สร้างสี .. ?
Leo Ufimtsev
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.