![LS_COLORS 混合匹配条件,例如文件扩展名和硬链接](https://linux22.com/image/71652/LS_COLORS%20%E6%B7%B7%E5%90%88%E5%8C%B9%E9%85%8D%E6%9D%A1%E4%BB%B6%EF%BC%8C%E4%BE%8B%E5%A6%82%E6%96%87%E4%BB%B6%E6%89%A9%E5%B1%95%E5%90%8D%E5%92%8C%E7%A1%AC%E9%93%BE%E6%8E%A5.png)
我想知道是否有一种方法可以保留扩展类型的特征颜色,ls --color=auto
并在文件是硬链接时加下划线。
例如,如果我这样做
LS_COLORS="*.tgz=01;31:mh=04" ls --color=auto foo.tgz
我看到该文件以粗体和红色显示,但如果我这样做:
ln foo.tgz bar.tgz
LS_COLORS="*.tgz=01;31:mh=04" ls --color=auto foo.tgz
现在我看到该文件为白色并带有下划线。我希望看到它以粗体红色和下划线显示,当然,也可以与其他扩展一起使用。
答案1
全部硬链接文件可以通过修改命令以粗体红色显示
LS_COLORS="*.tgz=01;31:mh=04" ls --color=auto foo.tgz
到
LS_COLORS="*.tgz=01;31:mh=04;01;31" ls --color=auto foo.tgz
mh=
变量的部分指LS_COLORS
的是硬链接文件。里面有一个表ls
源代码文档中没有出现:
enum indicator_no
{
C_LEFT, C_RIGHT, C_END, C_RESET, C_NORM, C_FILE, C_DIR, C_LINK,
C_FIFO, C_SOCK,
C_BLK, C_CHR, C_MISSING, C_ORPHAN, C_EXEC, C_DOOR, C_SETUID, C_SETGID,
C_STICKY, C_OTHER_WRITABLE, C_STICKY_OTHER_WRITABLE, C_CAP, C_MULTIHARDLINK,
C_CLR_TO_EOL
};
static const char *const indicator_name[]=
{
"lc", "rc", "ec", "rs", "no", "fi", "di", "ln", "pi", "so",
"bd", "cd", "mi", "or", "ex", "do", "su", "sg", "st",
"ow", "tw", "ca", "mh", "cl", NULL
};
是04
下划线的 SGR 代码(选择图形再现)。和是01
31
大胆的和红色的, 分别。通过将这些添加到部分中的变量中mh
,您可以像其他文件一样为硬链接文件着色(或者不同,如果您选择不同的数字)。
然而,GNUls
只选择一种方案来为每个文件着色。冒号:
分隔方案。在检查硬链接(以及符号链接和目录)等特殊类别后,程序仅有的查找后缀,例如tgz
当这些类别都不适用时。在源代码,即评论的
/* Check the file's suffix only if still classified as C_FILE. */
一旦它选择了一种方案,它就会执行该方案,不尝试组合方案。