export LS_COLORS :对每个以 README* 开头的文件应用规则
export LS_COLORS : apply the rule for every file beginning by README*
我对以下规则有疑问。如果我这样做:
eval `/opt/local/libexec/gnubin/dircolors ~/.dircolors`
export LS_COLORS="${LS_COLORS}*README=00;37;44"
然后,当创建一个README
文件时,我会得到:
但是现在,我想应用该规则并对以 README 开头的每个文件名执行相同的操作(例如 README_something
、README_important
)。
为此,我尝试将:
export LS_COLORS="${LS_COLORS}*README*=00;37;44"
但是没有像上图那样显示(只有白色)
如何使用 LS_COLORS
管理通配符(我使用的是 MacOS Big Sur)?
编辑 1
根据 user1934428 的建议,我尝试了:
export LS_COLORS="${LS_COLORS}:*README*=00;37;44"
不幸的是,例如,当我应用命令“l
”时,像 README_important 这样的文件名不会像我上面的图像那样显示,它实际上是由以下定义的:
alias l='grc -es --colour=auto ls --color -Gh -C -lrt'
为什么语法 README 不被接受?特别是第二颗星,它应该扩展所有名为 README_something
、README_anything
...等
的文件
编辑 2
这是值 $LS_COLORS,一旦我打开一个新终端:
$ echo $LS_COLORS
no=01;37:fi=01;37:di=32:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:ex=00;36:*~=05;31:*.mtxt=05;31:*.ndx=05;31:*.cmd=00;33:*.exe=00;33:*.com=00;33:*.btm=00;33:*.bat=00;33:*.txt=00;37:*.pdf=04;94:*.docx=00;91:*.doc=00;91:*.xlsx=00;91:*.xls=00;91:*.c=00;35:*.h=00;35:*.sh=00;36:*.py=00;36:*.cpp=00;35:*.pl=00;36:*.pm=00;35:*.cgi=00;35:*.java=00;35:*.html=00;35:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.jpg=01;35:*.jpeg=01;35:*.JPG=01;35:*.gif=01;35:*.GIF=01;35:*.bmp=01;35:*.BMP=01;35:*.xbm=01;35:*.ppm=01;35:*.xpm=01;35:*.tif=01;35:*.png=01;35:*README*=00;37;44
我现在只有一个“:
”字符。
但这并没有解决原始问题,即考虑 README*
文件名的通配符。
我在这里看到几个问题:
你显然假设 LS_COLOURS 已经有一个值,因为你扩展了它。但是,LS_COLOURS 中的条目由冒号分隔,而您没有。
另一个问题是顺序很重要:ls
一个接一个地解析条目,一旦找到匹配的条目,这就是它使用的颜色。因此,更具体的条目应该位于颜色列表的开头。
更新
我尝试了我的 ls
(GNU coreutils 8.26) 版本的各种变体,发现 *README*
等通配符模式会被忽略。唯一一种通配符模式是条目 start 处的星号。因此,
LS_COLORS='*README-txt=35;46' /bin/ls --color=yes *README*
为我的文件着色 x-README-txt
,但是
LS_COLORS='*README*=35;46' /bin/ls --color=yes *README*
LS_COLORS='*READ*-txt=35;46' /bin/ls --color=yes *README*
不要。另外,我上面关于条目顺序的评论 是不正确的 。虽然顺序确实很重要,但右边的条目优先。因此,如果您有
LS_COLORS='*txt=35,46:*t=32,44' /bin/ls --color=yes *README*
文件 x-README-txt
将使用 32,44 着色。
I would like to apply the rule and do the same for every filename beginning by README (like README_something, README_important).
那是不可能的。查看 GNU ls https://github.com/wertarbyte/coreutils/blob/master/src/ls.c#L4206 的来源,文件名从末尾匹配,直到它与 strncmp
.
的字符串匹配
这也处理空 LS_COLORS
:
export LS_COLORS="*README=00;37;44${LS_COLORS:+:${LS_COLORS}}"
我对以下规则有疑问。如果我这样做:
eval `/opt/local/libexec/gnubin/dircolors ~/.dircolors`
export LS_COLORS="${LS_COLORS}*README=00;37;44"
然后,当创建一个README
文件时,我会得到:
但是现在,我想应用该规则并对以 README 开头的每个文件名执行相同的操作(例如 README_something
、README_important
)。
为此,我尝试将:
export LS_COLORS="${LS_COLORS}*README*=00;37;44"
但是没有像上图那样显示(只有白色)
如何使用 LS_COLORS
管理通配符(我使用的是 MacOS Big Sur)?
编辑 1
根据 user1934428 的建议,我尝试了:
export LS_COLORS="${LS_COLORS}:*README*=00;37;44"
不幸的是,例如,当我应用命令“l
”时,像 README_important 这样的文件名不会像我上面的图像那样显示,它实际上是由以下定义的:
alias l='grc -es --colour=auto ls --color -Gh -C -lrt'
为什么语法 README 不被接受?特别是第二颗星,它应该扩展所有名为 README_something
、README_anything
...等
编辑 2
这是值 $LS_COLORS,一旦我打开一个新终端:
$ echo $LS_COLORS
no=01;37:fi=01;37:di=32:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:ex=00;36:*~=05;31:*.mtxt=05;31:*.ndx=05;31:*.cmd=00;33:*.exe=00;33:*.com=00;33:*.btm=00;33:*.bat=00;33:*.txt=00;37:*.pdf=04;94:*.docx=00;91:*.doc=00;91:*.xlsx=00;91:*.xls=00;91:*.c=00;35:*.h=00;35:*.sh=00;36:*.py=00;36:*.cpp=00;35:*.pl=00;36:*.pm=00;35:*.cgi=00;35:*.java=00;35:*.html=00;35:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.jpg=01;35:*.jpeg=01;35:*.JPG=01;35:*.gif=01;35:*.GIF=01;35:*.bmp=01;35:*.BMP=01;35:*.xbm=01;35:*.ppm=01;35:*.xpm=01;35:*.tif=01;35:*.png=01;35:*README*=00;37;44
我现在只有一个“:
”字符。
但这并没有解决原始问题,即考虑 README*
文件名的通配符。
我在这里看到几个问题:
你显然假设 LS_COLOURS 已经有一个值,因为你扩展了它。但是,LS_COLOURS 中的条目由冒号分隔,而您没有。
另一个问题是顺序很重要:ls
一个接一个地解析条目,一旦找到匹配的条目,这就是它使用的颜色。因此,更具体的条目应该位于颜色列表的开头。
更新
我尝试了我的 ls
(GNU coreutils 8.26) 版本的各种变体,发现 *README*
等通配符模式会被忽略。唯一一种通配符模式是条目 start 处的星号。因此,
LS_COLORS='*README-txt=35;46' /bin/ls --color=yes *README*
为我的文件着色 x-README-txt
,但是
LS_COLORS='*README*=35;46' /bin/ls --color=yes *README*
LS_COLORS='*READ*-txt=35;46' /bin/ls --color=yes *README*
不要。另外,我上面关于条目顺序的评论 是不正确的 。虽然顺序确实很重要,但右边的条目优先。因此,如果您有
LS_COLORS='*txt=35,46:*t=32,44' /bin/ls --color=yes *README*
文件 x-README-txt
将使用 32,44 着色。
I would like to apply the rule and do the same for every filename beginning by README (like README_something, README_important).
那是不可能的。查看 GNU ls https://github.com/wertarbyte/coreutils/blob/master/src/ls.c#L4206 的来源,文件名从末尾匹配,直到它与 strncmp
.
这也处理空 LS_COLORS
:
export LS_COLORS="*README=00;37;44${LS_COLORS:+:${LS_COLORS}}"