Это не совсем правильно, последовательность цветового кода и %p
должны быть в одном аргументе для -printf
и , а не в отдельных.
Флаг -printf
в find
отличается от обычного встроенного -в bash
. Версия find
принимает аргументы формы -printf format
, в то время как встроенная версия -принимает printf <FORMAT> <ARGUMENTS...>
, что означает, что первая не принимает спецификаторы формата -, за которыми следуют аргументы, а только одну строку с определенными параметрами. Опция -printf
для find
предоставляет различные последовательности для описания атрибутов файла. Значение %s
внутри find -printf
отличается от определения спецификации формата встроенным -.
Также я предполагаю, что printf
изfind
(команды GNU findutils )поддерживает только цветовые коды ANSI и не принимает управляющие последовательности \e
(, в отличие от встроенной -в printf
команды оболочка GNU,на автономной утилите GNU printf
), но ее восьмеричный эквивалент только (здесь 033, предполагая систему на основе ASCII -):
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
.