LS_COLORS que mistura critérios de correspondência, por ex. extensão de arquivo e hardlink

2

Gostaria de saber se existe uma maneira de manter a cor característica do tipo de extensão em ls --color=auto , além de sublinhar o arquivo se ele for um link físico.

Por exemplo, se eu fizer

 LS_COLORS="*.tgz=01;31:mh=04" ls --color=auto foo.tgz 

Eu vejo o arquivo em negrito e vermelho, mas se eu fizer isso:

ln foo.tgz bar.tgz
LS_COLORS="*.tgz=01;31:mh=04" ls --color=auto foo.tgz

agora vejo o arquivo em branco e sublinhado. Eu gostaria de vê-lo em negrito e sublinhado, e claro, fazer este trabalho com outras extensões também.

    
por alexis 25.08.2015 / 17:46

1 resposta

0

Todos os arquivos com link físico podem ser mostrados em negrito, modificando o comando

LS_COLORS="*.tgz=01;31:mh=04" ls --color=auto foo.tgz

para

LS_COLORS="*.tgz=01;31:mh=04;01;31" ls --color=auto foo.tgz

A parte mh= da variável LS_COLORS refere-se a arquivos com link físico. Há uma tabela no ls código fonte que não aparece na documentação:

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
  };

e o 04 é o código SGR (selecione renderização gráfica) para sublinhado. Os 01 e 31 são negrito e vermelho , respectivamente. Ao adicioná-los à variável na parte de mh , você pode colorir arquivos com link físico exatamente como outros arquivos (ou diferentes, se escolher números diferentes).

No entanto, o GNU ls escolhe apenas um esquema para colorir cada arquivo. O cólon : separa os esquemas. Após verificar categorias especiais, como hard-links (e links e diretórios simbólicos), o programa somente procura sufixos como tgz quando nenhuma dessas categorias se aplica. Em o código-fonte , que é comentado

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

e depois de selecionar um esquema, ele faz exatamente isso, sem tentar combinar esquemas .

    
por 03.07.2016 / 21:48

Tags