命令
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 的系统):printf
printf
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
。