ls -l --group-directoryories-first (symlink에도 적용)


9

ls옵션을 사용 --group-directories-first하면 디렉토리가 맨 위에 표시되어 결과가 ls좋고 깨끗합니다.

ls -l --group-directories-first

그러나 symlinks실제로 symlinks는 디렉토리 에 대해 작동하지 않습니다 . 사용할 가능성이 있습니다

ls -l -L --group-directories-first

이것은 두 종류의 디렉토리를 맨 위에 나열하지만 올바른 디렉토리와 심볼릭 링크 디렉토리를 구별하지 않으므로 다시 혼란 스럽습니다.

수 ls여전히 일반 디렉토리 구별을 유지하면서, 상단에 심볼릭 링크 디렉토리를 표시?

편집 : 사용하고 bash있습니다.


이 부분의 특이한 동작입니다 ls. stat()시스템 호출 에 따르면 디렉토리에 대한 기호 링크는 여전히 디렉토리입니다 ( S_ISDIR(st_mode)참을 리턴 함). 이를 확인 하기 전에ls 심볼릭 링크 를 증거 적으로 할인합니다 .
— goldilocks

2
@goldilocks, 아니, ls하지 않습니다 lstat()(그리고 readlink당신이 사용하지 않는 심볼릭 링크의 경우) -L옵션을 (이 경우에 사용 stat())
— 스테판 Chazelas가

@StephaneChazelas : 흠, 살고 배우십시오. 나는 S_ISLNK(st_mode)또한 via를 통해 true를 반환 한다고 생각 stat()했지만 그렇지 않습니다 lstat(). 또한 링크가 링크에 대한 링크 인 경우에도 ISLNK는 stat를 통해 true를 반환하지 않습니다. ISLNKstat를 통해 true를 반환하지 않을 수도 있음을 의미합니다. 지정되지 않았지만 ...
— goldilocks

@goldilocks stat는 심볼릭 링크 끝에서 파일의 속성을 제공합니다. 존재하지 않거나 액세스 할 수없는 stat경우 ENOENT를 반환하므로 반환되는 stat것은 심볼릭 링크가 아닙니다. stat()심볼릭 링크를 open열지 않거나 심볼릭 링크 chmod()의 권한을 변경하지 않는 것처럼 심볼릭 링크에 대해 아무 것도 말하지 않습니다 ...
— Stéphane Chazelas

답변:


5

아니요,을 사용하는 zsh경우 다음을 수행 할 수 있습니다.

mll() {
  (($#)) || set -- *(N-/) *(N^-/)
  (($#)) && ls -ldU -- $@
}

다음과 같이 globbing 정렬 순서를 정의 할 수도 있습니다.

dir1st() { [[ -d $REPLY ]] && REPLY=1-$REPLY || REPLY=2-$REPLY;}

다음과 같이 사용하십시오.

ls -ldU -- *(o+dir1st)

이렇게하면 다른 옵션 ls을 ls사용 하거나 사용하지 않고 다른 명령을 사용 하거나 다음과 같은 다른 패턴에 사용할 수 있습니다.

ls -ldU -- .*(o+dir1st) # to list the hidden files and dirs

또는:

ls -ldU -- ^*[[:lower:]]*(o+dir1st) # to list the all-uppercase files and dirs

를 사용해야하는 경우 다음 bash과 같습니다.

mll() (
  if (($# == 0)); then
    dirs=() others=()
    shopt -s nullglob
    for f in *; do
      if [[ -d $f ]]; then
        dirs+=("$f")
      else
        others+=("$f")
      fi
    done
    set -- "${dirs[@]}" "${others[@]}"
  fi
  (($#)) && exec ls -ldU -- "$@"
)

bashglobbing 한정자가 없거나 glob의 정렬 순서에 영향을 줄 방법이 없거나 glob를 기준으로 nullglob를 설정하는 방법이 없거나 옵션에 대한 로컬 컨텍스트가 있습니다 (서브 쉘을 시작 ()하지 않고 {}위 대신 대신 ). .


1
비슷한 트릭이 bash있습니까?
— Martin Vegter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.