ls -l – групповые каталоги – сначала (действуют также на символические ссылки)

ls option --group-directories-first заставляет каталоги перечисляться сверху, что делает вывод ls приятным и чистым:

 ls -l --group-directories-first 

Однако он не действует на symlinks , которые на самом деле являются symlinks на каталоги. Существует возможность использовать

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

в котором будут перечислены оба типа каталогов сверху, но не будет различать правильную директорию и символическую директорию, которая снова запутывает.

Может ли показывать отображаемые символические каталоги сверху, сохраняя при этом их отличные от обычных каталогов?

EDIT: Я использую bash .

  • Zsh запрашивает полную ширину с пользовательским вводом в следующей строке
  • Автозаполнение флагов после подкоманды
  • Как правильно собрать массив строк в zsh
  • Отключить завершение имени файла подстроки в zsh
  • Ограничение поддержки символов ZSH, поддерживающее повторение?
  • 256 цветов в Zsh
  • что такое zsh-эквивалент экспорта bash -f
  • Что означают буквы в команде `fc`?
  • One Solution collect form web for “ls -l – групповые каталоги – сначала (действуют также на символические ссылки)”

    Нет, но если вы используете 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 не имеет квалификаторов globbing или любого способа повлиять на порядок сортировки глобусов или каким-либо образом превратить nullglob на основе каждого шага или иметь локальный контекст для параметров (кроме запуска подоболочки, следовательно, вместо () вместо {} выше) AFAIK.

    Interesting Posts
    Linux и Unix - лучшая ОС в мире.