Bash

ls -l –group-directories-first (也作用於符號連結)

  • January 30, 2014

ls選項--group-directories-first會導致目錄列在頂部,這使得輸出變得ls乾淨整潔:

ls -l --group-directories-first

但是,它並不作用於symlinks實際上是symlinks對目錄的 。有可能使用

ls -l -L --group-directories-first

它將在頂部列出這兩種目錄,但不會區分正確目錄和符號連結目錄,這再次令人困惑。

可以ls在頂部顯示符號連結目錄,同時仍使它們與正常目錄不同?

編輯: 我正在使用bash.

不,但如果使用zsh,你可以這樣做:

mll() {
 (($#)) || set -- *(N-/) *(N^-/)
 (($#)) && ls -ldU -- $@
}

您還可以定義一個 globbing 排序順序,例如:

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沒有 globbing 限定符或任何影響 glob 排序順序的方式,或任何方式在每個 glob 的基礎上打開 nullglob,或具有選項的本地上下文(除了啟動子外殼,因此()而不是{}上面)AFAIK .

引用自:https://unix.stackexchange.com/questions/111637