-printf 플래그를 사용한 find 출력에 색상을 지정할 수 있습니까?

-printf 플래그를 사용한 find 출력에 색상을 지정할 수 있습니까?

주문하다

find . -type l -not -xtype l -printf "%p -> %l\n"

디렉토리에 있는 깨지지 않은 모든 심볼릭 링크를 인쇄합니다 .. 이 출력의 색상을 지정하여 해당 부분이 파란색으로 바뀌도록 하고 싶습니다 %p. 나는 노력했다

find . -type l -not -xtype l -printf '\e[1;34m%-6s\e[m' "%p -> %l\n"

그러나 이로 인해 오류가 발생합니다 find: warning: unrecognized escape \e. 이 문제를 해결하는 방법에 대한 아이디어가 있습니까?

답변1

이는 정확하지 않습니다. 색상 코드 순서와 동일한 매개변수 %p에 있어야 합니다 .-printf아니요별도로.

-printf플래그는 find의 일반적인 내장 플래그와 다릅니다 bash. 이 find버전은 양식 매개변수를 사용하는 -printf format반면 내장 버전은 형식 printf <FORMAT> <ARGUMENTS...>지정자를 사용하지 않고 인수 뒤에 오는 형식 지정자를 허용하지 않고 옵션을 정의하는 단일 문자열만 허용합니다. 옵션은 파일 속성을 설명하는 다양한 시퀀스를 -printf제공합니다 . find내부적으로 %s전달되는 의미는 find -printf내장된 형식 사양 정의와 다릅니다.

printf또한 (GNU findutils) 명령 의 명령은 ANSI 색상 코드만 지원하고 이스케이프 시퀀스를 허용하지 않는 것 같습니다 find(GNU 쉘의 독립 실행형 GNU 유틸리티에 내장된 것과 달리 \e). 8진수 해당 항목만 허용합니다(여기서는 033 ASCII 기반 시스템 가정 ):printfprintf

find . -type l -not -xtype l -printf '\033[1;34m%p\033[m -> %l\n'

원하는 ANSI 색상 코드를 추가할 수 있습니다.

$'...'또는 다음을 인식하는 GNU 쉘을 포함한 일부 쉘에 있는 인용 연산자를 사용할 수 있습니다 \e.

find . -type l -not -xtype l -printf $'\e[1;34m%p\e[m -> %l\n'

위의 \e\n는 에 전달되기 전에 ESC 및 NL 문자로 확장됩니다 find.

관련 정보