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)

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

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.