ls
选项--group-directories-first
导致目录列在顶部,这使得输出ls
漂亮而干净:
ls -l --group-directories-first
然而,它并不作用于symlinks
,它实际上作用symlinks
于目录。有可能使用
ls -l -L --group-directories-first
它将在顶部列出两种目录,但不会区分正确的目录和符号链接目录,这又令人困惑。
可以ls
在顶部显示符号链接目录,同时仍然使它们与常规目录不同吗?
编辑:
我在用bash
。
答案1
不,但如果使用zsh
,你可以这样做:
mll() {
(($#)) || set -- *(N-/) *(N^-/)
(($#)) && ls -ldU -- $@
}
您还可以定义一个全局排序顺序,例如:
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 -- "$@"
)
bash
没有通配符限定符或任何影响通配符排序顺序的方法,或任何在每个通配符的基础上将空通配符转换为空通配符的方法,或者具有选项的本地上下文(除了启动子shell之外,因此而不是()
上面{}
的)AFAIK 。