컬러 FIND 출력?


15

find 명령 에서 컬러 출력을 얻을 있습니까? 즉, 발견 된 각 항목의 경로에서 디렉토리는 파란색이고 실행 가능한 스크립트는 녹색입니다. GNU findutils 4.4.2 버전을 사용하고 있습니다.

편집-명확히하기 위해 각 결과는 다음과 같이 강조 표시됩니다.

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

(예를 들어, 실행중인 경우 find . -type f).


나는 주로 찾기 호환이라고 교체 썼다 bfs:이 기능이 github.com/tavianator/bfs
Tavian 반즈

답변:


10

업데이트 : 새로운 (다른) 스크립트를 추가했습니다 ... 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 굵은 흰색

아직 설정 파일을 처리하는 방법을 완전히 정리하지는 않았지만 원하는대로 할 것입니다 (한 번 길 들이면됩니다). 하위 디렉토리가없는 파일의 경우 색상 순서가 표현식과 동일한 순서가 아닌 것 같습니다.
나는 가능하다고 가정하지만 (현재 조금 바쁘다) ...

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

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

새로운 이그나시오 영감 스크립트 는 다음과 같습니다. :)

단일 경로를의 첫 번째 인수로 사용하는 경우 작동합니다 find. 이 스크립트
에는 UNTESTED 문제가 있습니다. 그것은 개념 일뿐입니다.
한 가지 문제는 다음과 같습니다. Symbolic Links ... murky waters ... 그대로, 알 수없는 유형 (예 : 심볼릭 링크)이 발생
하면를 인쇄 한 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

와. 너무 많은 일이 나에게 가치가있을 수 있습니다
계산법 캐년

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

이것은 색을 생성하지 않는 것 같습니다 ..?
레오 Ufimtsev
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.