ls -l --group-directories-first (也作用于符号链接)

ls -l --group-directories-first (也作用于符号链接)

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 。

相关内容