基于正则表达式而不是通配符设置 ls 颜色列表

基于正则表达式而不是通配符设置 ls 颜色列表

是否可以在 LS_COLORS 变量中设置颜色匹配的正则表达式模式?所以而不是仅仅

*.jpg=38;5;220

我可不可以做

\.(jpg|gif)=38;5;220

这只是一个例子,我想变得更复杂。我对此要求是否过高?有没有另一种方法可以让我更喜欢终端配色方案?

顺便说一句,我正在使用 zsh,所以如果我可以在那里执行但不能使用 bash,那就没问题了。

答案1

这是该ls实用程序的一个功能GNU 核心工具。它不依赖于外壳。该语法没有记录(您应该使用dircolors并从那里计算它),但快速查看源代码表明按名称匹配文件的唯一方法是使用*后跟一个字符串,该字符串必须是一个后缀要匹配的文件名。该字符串按字面意思解释,除了\^引入转义序列(例如\n==^J换行符)。

所以你不能将不同的扩展名与相同的模式匹配。但是您可以使用 shell 编程结构来构建LS_COLORS

for ext in jpg gif; do LS_COLORS="$LS_COLORS:*.$ext=38;5;220"; done

相关内容