带有 -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通常的内置 from 不同bash。该find版本采用 form 参数,-printf format而内置版本采用printf <FORMAT> <ARGUMENTS...>,这意味着前者不接受格式说明符后跟参数,而只接受定义了选项的单个字符串。选项-printf提供find了描述文件属性的各种序列。内部%s传达的find -printf含义与内置的格式规范定义不同。

另外,我猜(GNU findutils) 命令printf中的find命令仅支持 ANSI 颜色代码,并且不接受转义序列(与独立 GNU 实用程序上的 GNU shell 的\e内置不同),但仅其八进制等效项(此处 033 假设基于 ASCII 的系统):printfprintf

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

您可以将您选择的 ANSI 颜色代码添加到上面。

或者您可以使用$'...'在包括 GNU shell 在内的一些 shell 中找到的引用运算符,它确实可以识别\e

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

上面的\e\n在传递给 之前会扩展为 ESC 和 NL 字符find

相关内容