TÌM màu đầu ra?


13

Có thể nhận được đầu ra màu từ lệnh find ? Đó là, trong đường dẫn của mỗi mục tìm thấy, các thư mục có màu xanh lam, các tập lệnh thực thi có màu xanh lá cây, et cetera? Tôi đang sử dụng phiên bản 4.4.2 của findutils GNU .

Chỉnh sửa - Để làm rõ, mỗi kết quả sẽ được tô sáng như thế này:

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

(nếu, ví dụ, thực thi find . -type f).


Tôi đã viết một thay thế hầu hết tương thích tìm được gọi là bfscó chức năng này: github.com/tavianator/bfs
Tavian Barnes

Câu trả lời:


9

CẬP NHẬT: Tôi đã thêm một tập lệnh (khác) mới ... Ignacio Vazquez-Abrams có một điểm: Câu hỏi thực sự yêu cầu executable scripts are green, et cetera.. được rồi ... bạn sẽ tìm thấy một tập lệnh (nguyên mẫu) như vậy ở cuối câu trả lời này.


Phần đầu tiên (bản gốc) này là về grcgrcat.

Điều này nên làm việc; grc... (như enzotib đã chỉ ra .. Tên gói là grc... Tiện ích phụ được sử dụng trong ví dụ này làgrcat

generic colouriser for everything

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

Ví dụ sau đây in

  • ./ màu đỏ tươi
  • bin/cpp/ màu lục lam
  • bigint màu trắng đậm

Tôi chưa sắp xếp đầy đủ cách nó xử lý tập tin cấu hình, nhưng có vẻ như nó sẽ làm những gì bạn muốn (một khi bạn thuần hóa nó) .. vd. đối với một tệp không có thư mục con và chuỗi màu dường như không nằm trong cùng chuỗi với biểu thức.
Tôi cho rằng điều đó là có thể (nhưng hiện tại tôi hơi bận) ...

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

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

Đây là kịch bản mới lấy cảm hứng từ Ignacio :)

Điều này hoạt động nếu bạn sử dụng một đường dẫn duy nhất như đối số đầu tiên find.
Có những vấn đề UNTESTED trong kịch bản này. Nó chỉ là khái niệm.
Một vấn đề là: Liên kết tượng trưng ... vùng nước âm u ...
Như vậy, nó in ra ERRORkhi gặp một loại không xác định (ví dụ: liên kết tượng trưng), và sau đó tiếp tục xử lý qua đó.
Cảm ơn enzotibcác tputví dụ.

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 

Bạn đã quên nói rằng bạn đang đề cập đến grcattiện ích từ grcgói :) Lúc đầu tôi gặp một số khó khăn để hiểu những gì bạn đang nói.
enzotib

Tôi thực sự đã bỏ lỡ thực tế là OP muốn một màu khác nhau cho các loại tệp khác nhau.
enzotib

Ồ Quá nhiều công việc xứng đáng với tôi
Kolob Canyon

6

Bạn có thể sử dụng -execđể làm hầu hết điều đó (giải pháp của tôi không tô màu phần thư mục khác nhau). Nếu bạn có -printtrong findlệnh của bạn , thay thế nó bằng -exec ls --color -d; nếu bạn đang sử dụng in ngầm, hãy thêm nó. Điều này giả định lshỗ trợ của bạn --colortùy chọn.

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

1
Tôi không chắc ai đã ủng hộ điều này, nhưng tôi không tin rằng họ đã đọc xong câu hỏi (không phải tôi đang nói câu trả lời này xứng đáng với một downvote tương ứng) ...
Ignacio Vazquez-Abrams

4

Điều này chỉ làm nổi bật hai màu cho đường dẫn và tên tệp, không phải là điều trên mỗi filetype của ls:

Định cấu hình màu của grepđầu ra theo đúng cách cho phần khớp và không khớp và khớp với tên tệp:

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


màn hình màu

Bạn có thể không muốn ghi đè lên biến GREP_COLORS, vì vậy chỉ đặt nó cho grep:

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

(Định nghĩa trom biến không dùng GREP_COLORcó mức độ ưu tiên thấp hơn so với biến trong GREP_COLORS)

Đối với các mã màu, xem colortest-16từ các gói colortest,
và phần "Set Graphics Rendition" trong ANSI chuỗi lệnh terminal .


-1

Tôi thích ý tưởng -exec. Tôi đã sử dụng nó để tạo chức năng này:

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

Điều này dường như không tạo ra màu sắc ..?
Leo Ufimtsev
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.