--group-directories-first를 사용할 때 디렉토리에 대한 소프트 링크를 디렉토리와 그룹화하는 쉬운 방법이 있습니까?

--group-directories-first를 사용할 때 디렉토리에 대한 소프트 링크를 디렉토리와 그룹화하는 쉬운 방법이 있습니까?

나는 --group-directories-first깃발을 좋아한다 ls. 내 .zshrc에는 다음 줄이 있습니다.

alias ls="ls -h --color='auto' --group-directories-first"

내가 싫어하는 유일한 점은 디렉토리에 대한 심볼릭 링크가 디렉토리와 그룹화되지 않는다는 것입니다.

ls디렉터리에 대한 심볼릭 링크를 디렉터리와 그룹화하기 위해 명령에 추가할 수 있는 스위치가 있습니까 ? 나는 ls추가 스위치를 동적으로 추가하는 것을 좋아하기 때문에 복합 명령을 작성하는 것을 꺼려합니다 .

답변1

한 가지 옵션은 다음 플래그를 사용하는 것입니다 -L.

-L, --역참조

심볼릭 링크에 대한 파일 정보를 표시할 때 링크 자체가 아닌 링크가 참조하는 파일에 대한 정보를 표시합니다.

예를 들어 다음과 같은 파일과 디렉터리가 있다고 가정해 보겠습니다.

$ ls -l --group-directories-first
total 0
drwxr-xr-x. 2 user group 6 Nov 30 08:19 zdir1
drwxr-xr-x. 2 user group 6 Nov 30 08:19 zdir2
-rw-r--r--. 1 user group 0 Nov 30 08:20 file1
-rw-r--r--. 1 user group 0 Nov 30 08:20 file2
lrwxrwxrwx. 1 user group 5 Nov 30 08:23 symlink -> zdir2

-L심볼릭 링크는 사용 시 디렉토리와 함께 정렬됩니다.

$ ls -lL --group-directories-first
total 0
drwxr-xr-x. 2 user group 6 Nov 30 08:19 symlink
drwxr-xr-x. 2 user group 6 Nov 30 08:19 zdir1
drwxr-xr-x. 2 user group 6 Nov 30 08:19 zdir2
-rw-r--r--. 1 user group 0 Nov 30 08:20 file1
-rw-r--r--. 1 user group 0 Nov 30 08:20 file2

알다시피, ls파일이 심볼릭 링크인지 여부는 더 이상 표시되지 않습니다. 나는 ls심볼릭 링크를 역참조한 후 표시하는 방법에 익숙하지 않지만 이를 수행하기 위해 해킹된 bash 함수를 작성했습니다.

lsd() {
        ls -lL --group-directories-first | while read line; do
                file=$(echo "$line" | awk '{print $NF}')
                ls -ld "$file" 2>/dev/null | grep -q "^l"
                if [ $? -eq 0 ]; then
                        symlink=$(ls -l $file | awk '{print $(NF-2),$(NF-1),$NF}')
                        echo "$line" | sed -e "s/^./l/" -e "s/$file/$symlink/"
                else
                        echo "$line"
                fi
        done
}

기본적으로 스크립트는 파일 출력이 ls -lL --group-directories-first심볼릭 링크인지 확인합니다. 그렇다면 첫 번째 문자가 다음으로 변경되고 l심볼릭 링크가 가리키는 내용이 줄 끝에 추가됩니다.

$ lsd
total 0
lrwxr-xr-x. 2 user group 6 Nov 30 13:49 symlink -> zdir2
drwxr-xr-x. 2 user group 6 Nov 30 13:49 zdir1
drwxr-xr-x. 2 user group 6 Nov 30 13:49 zdir2
-rw-r--r--. 1 user group 0 Nov 30 13:49 file1
-rw-r--r--. 1 user group 0 Nov 30 13:49 file2

답변2

마지막으로,GNU coreutils v8.312019년,

ls --group-directories-first는 또한 기호 링크를 디렉토리로 그룹화합니다.

관련 정보