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
-s
sort
--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
compinstall
zsh 완성 구성을 위한 메뉴 기반 인터페이스 기능 도 참조하세요 .