![使用 --group-directories-first 时,是否有一种简单的方法可以将目录的软链接与目录分组?](https://linux22.com/image/142824/%E4%BD%BF%E7%94%A8%20--group-directories-first%20%E6%97%B6%EF%BC%8C%E6%98%AF%E5%90%A6%E6%9C%89%E4%B8%80%E7%A7%8D%E7%AE%80%E5%8D%95%E7%9A%84%E6%96%B9%E6%B3%95%E5%8F%AF%E4%BB%A5%E5%B0%86%E7%9B%AE%E5%BD%95%E7%9A%84%E8%BD%AF%E9%93%BE%E6%8E%A5%E4%B8%8E%E7%9B%AE%E5%BD%95%E5%88%86%E7%BB%84%EF%BC%9F.png)
我喜欢--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
取消引用后显示符号链接的方法,但我编写了一个 hacky 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 还将符号链接分组到目录。