나는 --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는 또한 기호 링크를 디렉토리로 그룹화합니다.