Вопрос
Можете ли вы отсортировать лс список по имени?
Решение
Мой ls по умолчанию сортирует по имени.Что вы видите?
man ls
состояния:
List information about the FILEs (the current directory by default). Sort entries alpha‐betically if none of -cftuvSUX nor --sort is specified.
:
Другие советы
Для чего-то простого вы можете объединить лс с Сортировать.Просто список имен файлов:
LS -1 | Сортировать
Чтобы отсортировать их в обратном порядке:
LS -1 | Сорт -Р
ls
от coreutils
выполняет с учетом локали сортировка по умолчанию и поэтому в некоторых случаях может давать неожиданные результаты (например, %foo
буду сортировать между bar
и quux
в LANG=en_US
).Если вам нужна сортировка ASCIIbetical, используйте
LANG=C ls
Прелесть инструментов *nix в том, что их можно комбинировать:
ls -l | sort -k9,9
Выход ls -l
будет выглядеть так
-rw-rw-r-- 1 luckydonald luckydonald 532 Feb 21 2017 Makefile
-rwxrwxrwx 1 luckydonald luckydonald 4096 Nov 17 23:47 file.txt
Итак, с 9,9
вы сортируете столбец 9
до колонны 9
, которые являются именами файлов.Вы должны указать, где остановиться (в данном случае это тот же столбец).Столбцы начинаются с 1
.
Кроме того, если вы хотите игнорировать верхний/нижний регистр, добавьте --ignore-case
к команде сортировки.
УВЕДОМЛЕНИЕ:«а» идет ПОСЛЕ «Z»:
$ touch A.txt aa.txt Z.txt
$ лс
A.txt Z.txt aa.txt
Файлы, отличающиеся только числовой строкой, можно сортировать по этому номеру при условии, что ему предшествует разделитель.
В этом случае можно использовать следующий синтаксис:
ls -x1 file | sort -t'<char>' -n -k2
Пример:
ls -1 TRA*log | sort -t'_' -n -k2
TRACE_1.log
TRACE_2.log
TRACE_3.log
TRACE_4.log
TRACE_5.log
TRACE_6.log
TRACE_7.log
TRACE_8.log
TRACE_9.log
TRACE_10.log
На странице руководства (для bash ls):
Сортируйте записи в алфавитном порядке, если нет ни -cftuSUX, ни --sort.
Проверьте свои .bashrc
файл для псевдонимов.
А ls
Утилита должна соответствовать стандарту IEEE Std 1003.1-2001 (POSIX.1
), в котором говорится:
22027:он должен сортировать операнды каталога и не-каталога отдельно в соответствии с последовательностью сортировки в текущей локали.
26027:По умолчанию формат не указан, но вывод должен быть отсортирован в алфавитном порядке по названию символа:
- Имя библиотеки или объекта, если указано –A
- Имя символа
- Тип символа
- Значение символа
- Размер, связанный с символом, если применимо.
Для этой цели подойдет ls -X, если вы присвоили ls более полезное значение по умолчанию.
In Debian Jessie, this works nice:
ls -lah --group-directories-first
# l=use a long listing format
# a=do not ignore entries starting with .
# h=human readable
# --group-directories-first=(obvious)
# Note: add -r for reverse alpha
# You might consider using lh by appending to ~/.bashrc as the alias:
~$ echo "alias lh='ls -lah --group-directories-first'" >>~/.bashrc
# -- restart your terminal before using lh command --