ls를 사용하여 다른 디렉토리와 디렉토리 심볼릭 링크를 그룹화하는 방법은 무엇입니까?

ls를 사용하여 다른 디렉토리와 디렉토리 심볼릭 링크를 그룹화하는 방법은 무엇입니까?

ls --group-directories-first모든 디렉터리는 파일 앞에 표시되지만 디렉터리에 대한 심볼릭 링크가 있는 경우 파일 사이에 표시됩니다. 디렉토리 심볼릭 링크를 다른 일반 디렉토리와 그룹화하는 방법이 있습니까?

답변1

예를 들면 다음과 같습니다 -L.

$ ls -l
total 4
-rw-r--r-- 1 ja users    0 Dec 20 13:23 A
drwxr-xr-x 2 ja users 4096 Dec 20 13:23 b
lrwxrwxrwx 1 ja users    1 Dec 20 13:23 sl -> b
$ ls --group-directories-first -l
total 4
drwxr-xr-x 2 ja users 4096 Dec 20 13:23 b
-rw-r--r-- 1 ja users    0 Dec 20 13:23 A
lrwxrwxrwx 1 ja users    1 Dec 20 13:23 sl -> b
$ ls --group-directories-first -lL
total 8
drwxr-xr-x 2 ja users 4096 Dec 20 13:23 b
drwxr-xr-x 2 ja users 4096 Dec 20 13:23 sl
-rw-r--r-- 1 ja users    0 Dec 20 13:23 A

답변2

-L나는 이것이 (심볼릭 링크에 대한 정보를 제공하지만 심볼릭 링크의 대상은 제공하지 않음) 없이는 가능하지 않다고 생각합니다.

항상 ls 호출을 실행할 수 있습니다 two. 하나는 디렉토리용이고 다른 하나는 디렉토리가 아닌 경우입니다. 그리고 zsh:

lldirfirst() {
  local -a dir nondir
  local ret=0
  dir=(*(N-/)) nondir=(*(N^-/))
  (($#dir == 0)) || ls -ld -- $dir || ret=$?
  (($#nondir == 0)) || ls -ld -- $nondir || ret=$?
  return $ret
}

이는 ls -l현재 디렉터리에서만 작동하므로 다른 파일/디렉터리를 나열하려면 조정해야 합니다.

또한 열 정렬이 깨질 수 있습니다.

$ lldirfirst
drwxr-xr-x 2 chazelas chazelas 4096 Dec 20 13:20 c
lrwxrwxrwx 1 chazelas chazelas    1 Dec 20 13:20 d -> c
-rw-r--r-- 1 chazelas chazelas 0 Dec 20 13:20 a
-rw-r--r-- 1 chazelas chazelas 0 Dec 20 13:20 b

-qF또 다른 옵션은 first로 끝나는 줄을 사용하고 정렬하는 것입니다 /( GNU의 ls모든 구현이 디렉토리에 심볼릭 링크를 배치하고 GNU와 유사한 구현을 지원하지는 않지만 이미 GNU에만 해당한다고 가정) .ls/sort-ssort--group-directories-first

lsdirfirst() {
  ls -qF "$@" |
    awk '{if(/^total [0-9]+$/ || /\/$/) n=1; else n=2; print n, $0}' |
    sort -sk1,1 | cut -d' ' -f2-
}

예:

$ lsdirfirst -l
total 4
drwxr-xr-x 2 chazelas chazelas 4096 Dec 20 13:20 c/
lrwxrwxrwx 1 chazelas chazelas    1 Dec 20 13:20 d -> c/
-rw-r--r-- 1 chazelas chazelas    0 Dec 20 13:20 a
-rw-r--r-- 1 chazelas chazelas    0 Dec 20 13:20 b

zsh다음을 사용하여 먼저 디렉토리를 나열하도록 완성 시스템에 지시할 수 있습니다 .

zstyle ':completion:*' list-dirs-first true

심볼릭 링크를 디렉토리에 넣습니다.목차범주:

$lsTab
목차 완성하기
CD@
완전한 문서
ab

(색상도 있고완료 중...설명(추가 s가 활성화된 경우 zstyle)

zstyle명령을 다음과 같이 변경 하면 됩니다 .

zstyle ':completion:*:*:(ls|echo):*:*' list-dirs-first true

ls예를 들어 및 명령 에 대해서만 echo활성화합니다 .

~/.zshrc다음은 위의 컬러 출력을 얻기 위한 구성 예입니다 .

eval "$(dircolors -b)"
zstyle ':completion:*' completer _expand _complete _ignored _correct _approximate _prefix
zstyle ':completion:*' format 'Completing %d'
zstyle ':completion:*' group-name ''
zstyle ':completion:*' menu select=2
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
zstyle ':completion:*' list-dirs-first true
autoload -Uz compinit
compinit -i

compinstallzsh 완성 구성을 위한 메뉴 기반 인터페이스 기능 도 참조하세요 .

관련 정보