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

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

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

ls не требуется, любой грязный взлом приветствуется. Но что касается стиля вывода, мне нужен многоколоночный цветной вывод с индикатором, похожий на то, что сделал ls -C --color -F .

  • Как настроить порядок сортировки символов?
  • Создание рекурсивно отсортированного RAR-архива
  • Ограничение размера файла превышено в bash
  • Команда сортировки в нескольких полях
  • Сортировка вывода ps не работает
  • Алфавит в именах файлов с помощью сортировки?
  • Могу ли я разархивировать и объединить отсортированные текстовые файлы за одну операцию?
  • Процессы печати, отсортированные по использованию ЦП
  • 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-квалификаторами, сопоставляющими каталоги, исполняемые файлы, символические ссылки, каналы, сокеты и, соответственно, все остальное.

    Interesting Posts

    Как печатать одинаковые строки несколько раз с переменными, измененными с помощью Sed / Awk / anything?

    Ошибка аппаратного обеспечения APEI

    xrandr: откуда берется выход VIRTUAL1?

    Как завершить фоновый процесс в Linux, когда pid неизвестен?

    udev повторная нумерация при создании символических ссылок

    Как использовать printf и% s при наличии цветовых кодов?

    лучший способ настроить отдельную среду Linux в ~

    Изменить местоположение замещения процесса zsh '= ()'

    Проблема обновления ядра Red Hat

    FreeBSD: Как запустить скрипт python в качестве демона?

    Установка альтернативных устройств (с различными вариантами крепления) в одной точке подключения

    Как печатать из заданного диапазона ip-адресов каждый класс-c с последним октетом, замененным звездочкой

    Принимать только y или yes с однострочным регулярным выражением

    Просмотр pagetable для процесса

    rpmbuild: Есть ли способ указать рекомендуемые пакеты

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