파일 확장자 및 하드 링크와 같은 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를 사용하면 다른 파일과 마찬가지로 하드 링크 파일의 색상을 지정할 수 있습니다(또는 다른 번호를 선택한 경우 다르게).

그러나 GNU는 ls각 파일에 색상을 지정하기 위해 하나의 구성표만 선택합니다. 콜론 :분리 방식. 하드 링크(심볼릭 링크 및 디렉토리 포함)와 같은 특수 범주를 확인한 후 프로그램은오직tgz이러한 범주 중 어느 것도 적용되지 않는 경우 와 같은 접미사를 찾으십시오 . 존재하다소스 코드, 즉 댓글입니다.

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

계획을 선택하면 해당 계획을 실행하고,조합을 시도하지 않음.

관련 정보