LS_COLORS 混合匹配条件,例如文件扩展名和硬链接

LS_COLORS 混合匹配条件,例如文件扩展名和硬链接

我想知道是否有一种方法可以保留扩展类型的特征颜色,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 代码(选择图形再现)。和是0131大胆的红色的, 分别。通过将这些添加到部分中的变量中mh,您可以像其他文件一样为硬链接文件着色(或者不同,如果您选择不同的数字)。

然而,GNUls只选择一种方案来为每个文件着色。冒号:分隔方案。在检查硬链接(以及符号链接和目录)等特殊类别后,程序仅有的查找后缀,例如tgz当这些类别都不适用时。在源代码,即评论的

  /* Check the file's suffix only if still classified as C_FILE.  */

一旦它选择了一种方案,它就会执行该方案,不尝试组合方案

相关内容