![-printf 플래그를 사용한 find 출력에 색상을 지정할 수 있습니까?](https://linux55.com/image/154019/-printf%20%ED%94%8C%EB%9E%98%EA%B7%B8%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%9C%20find%20%EC%B6%9C%EB%A0%A5%EC%97%90%20%EC%83%89%EC%83%81%EC%9D%84%20%EC%A7%80%EC%A0%95%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
주문하다
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 기반 시스템 가정 ):printf
printf
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
.