Как я могу перечислить файлы по классу / индикатору (как в ls -classify), а затем по имени?

ls --clasify добавляет индикатор (один из */=>@| ) в записи. Я хотел бы объединить записи одного и того же класса / индикатора вместе.

Я могу найти только ls --group-directories-first для группировки / вместе, как я могу группировать исполняемые файлы * , symlinks @ , pipe | и сокеты = , тоже?

  • Запуск скрипта cron с lynx не работает
  • скрипт меню через ssh
  • как перемещать (не копировать) файлы с одного сервера на другой?
  • Как получится, когда x = abc, ] && echo yes || эхо не возвращается?
  • Многократное перенаправление файлов с помощью awk и поиск
  • Найти рекурсивный поиск Grep
  • ls не требуется, любой грязный взлом приветствуется. Но что касается стиля вывода, мне нужен многоколоночный цветной вывод с индикатором, похожий на то, что сделал ls -C --color -F .

  • Как отключить цвет с помощью `ls`?
  • Автоматическое ведение журнала скриптов, выполняемых пользователями
  • Как проверить файл настроек (ini) для ожидаемых значений с помощью bash?
  • Как поставить «rm -i» на итерации?
  • Как я могу отображать восьмеричные обозначения разрешений с помощью ls - и может ли восьмеричное представлять все разрешения?
  • Параллельное выполнение сценария sh на нескольких серверах
  • 2 Solutions collect form web for “Как я могу перечислить файлы по классу / индикатору (как в ls -classify), а затем по имени?”

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

     ls -C --color -F -1 | rev | sort | rev 

    По существу:

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

    Это, к сожалению, имеет одноколоночный выход. Вы можете применить к нему column чтобы получить вывод из нескольких столбцов, но из-за непечатаемых символов столбцы перепутались:

     $ ls -C --color -F /proc/self/ -1 | rev | sort -i | rev | column -x fd/ task/ fdinfo/ attr/ ns/ net/ cwd@ exe@ root@ sched cmdline oom_score oom_score_adj oom_adj stack syscall mem comm statm wchan environ mountinfo io pagemap cgroup autogroup coredump_filter clear_refs maps numa_maps smaps mountstats limits mounts status stat schedstat cpuset auxv personality 

    И, конечно же, он предполагает оговорки:

    • нет новых строк в именах файлов
    • ни один из символов маркировки ls указан в именах файлов

    Функция bash, использующая комбинацию find , sort и ls , которая приближается:

     lsc () ( [[ -z $1 ]] && set . for path do [[ -d $path ]] || { ls -CF --color "$path"; echo; continue; } (( $# > 1 )) && printf '%s:\n' "$path" find "$path" -maxdepth 1 -mindepth 1 ! -iname '.*' -printf "%y %p\0" | while IFS= read -d '' -r entry do ftype="${entry:0:1}" fname="${entry:2}" [[ $ftype == f && -x $fname ]] && ftype=x printf "$ftype $fname\0" done | sort -z -k1 | sed -z 's/^. //; s:.*/::' | xargs -0 bash -c 'cd "$0"; ls -CFUd --color "$@"' "$path" (( $# > 1 )) && echo done ) 

    Используя само ls , печать на несколько столбцов становится намного проще.

    Используя тот же ls -CFUd что и muru, но в zsh , вы можете попробовать:

     setopt nullglob ls --color -CFUd -- *(/) *(*) *(@) *(p) *(=) *(^/*@p=) 

    где (...) являются glob-квалификаторами, сопоставляющими каталоги, исполняемые файлы, символические ссылки, каналы, сокеты и, соответственно, все остальное.

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