Unix 'ls' сортирует по имени

Можете ли вы отсортировать список ls по имени?


person Devang Kamdar    schedule 18.05.2009    source источник
comment
Если он не сортируется по имени без каких-либо аргументов, вы можете проверить, был ли псевдоним ls для чего-то другого, или просто вызвать его, используя полный путь, который устранит любые существующие псевдонимы.   -  person tvanfosson    schedule 18.05.2009
comment
gnu-coreutils ls сортирует по умолчанию. Какую систему вы используете (как спрашивали другие)   -  person Nick Fortescue    schedule 18.05.2009
comment
Вы уверены, что просите сортировать по имени, а не по типу (т.е. сначала каталог, затем файлы)??   -  person curtisk    schedule 18.05.2009
comment
Заглавные буквы идут перед строчными, таким образом, файл Z идет перед файлом a... как я могу это исправить?   -  person ArtOfWarfare    schedule 01.10.2013
comment
на странице руководства написано «отсортировано отдельно и в лексикографическом порядке». Файлы сортируются по первому символу: цифре [0..9] и прописным буквам [A..Z] и младшим символам [a..z]   -  person Gürol Canbek    schedule 28.05.2016
comment
@tvanfosson, как мне это проверить?   -  person Daniel Springer    schedule 13.05.2018
comment
@user770 используйте команду alias (без каких-либо аргументов), чтобы перечислить все созданные вами псевдонимы, en.wikipedia.org/wiki/Псевдоним_(команда)   -  person tvanfosson    schedule 13.05.2018
comment
@tvanfosson не напечатал вывод и подтвердил мою проблему (заглавные буквы имеют приоритет). Спасибо :)   -  person Daniel Springer    schedule 13.05.2018


Ответы (12)


Мой 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.:

person Evert    schedule 18.05.2009
comment
ls не сортируется, если указано -c1: есть ли способ заставить его это сделать? (--sort=name не работает) - person dhc; 16.01.2015
comment
Это неправда. с ls -la я вижу: .bashrc - can - .config - Downloads - .local - tmp, сортировка по имени будет: .bashrc - .config - .local - Downloads - can - tmp - person 12431234123412341234123; 14.08.2017
comment
мой говорит, что 100.jpg предшествует 10.jpg. Думаю, имеет смысл, если 0 предшествует . но все равно не интуитивно - person chiliNUT; 22.11.2017
comment
Я вижу М до б. Смущенный. Подождите, имеет ли значение заглавная буква? - person Daniel Springer; 13.05.2018

Для чего-то простого вы можете комбинировать ls с sort. Просто список имен файлов:
ls -1 | сортировать

Чтобы отсортировать их в обратном порядке:
ls -1 | сортировать -r

person Mark    schedule 18.05.2009
comment
Есть ли способ сортировать файлы следующим образом: ls | sort -n 1.1.1; 1.1.2; 1.1.3; 2.10.1; 2.10.15; 2.10.2; 2.10.20; 2.10.21; 2.1.1; 2.1.10; 2.1.15; 2.1.2; 2.1.3; 2.1.4; 10.1.1; 10.1.2; 10.1.3; 11.0.1; 11.0.2; 11.0.20; 11.0.21; 11.0.22; Как видите, 2.10.15 до 2.10.2. - person BBK; 14.02.2014
comment
Я занимаюсь разработкой Android на устройстве Pidion, и ls не выполняет автоматическую сортировку, так что это было очень полезно! Единственная проблема в том, что похоже, что он сортирует программные ссылки, но не сортирует файлы по какой-то причине. - person Mitch; 16.12.2014
comment
На Mac похоже, что вторую команду можно сократить до ls -1r. - person Ash Ryan Arnwine; 01.06.2016
comment
@BBK sort -V будет сортировать по номерам версий, поэтому вы получите .. 2.10.2; 2.10.15; .. from man sort .. --sort=WORD будет сортировать в соответствии со СЛОВОМ: общее числовое значение -g, человеческое числовое значение -h, месяц -M, числовое значение -n, ​​случайное значение -R, версия -V - person mosh; 21.01.2018

ls из coreutils по умолчанию выполняет сортировку с учетом региональных настроек и, таким образом, в некоторых случаях может давать неожиданные результаты (например, %foo будет сортировать между bar и quux в LANG=en_US). Если вам нужна ASCIIбетическая сортировка, используйте

LANG=C ls
person Richard Smith    schedule 26.08.2013
comment
LANG ilfnuance поведение сортировки, этот пост мне очень помог! - person yurenchen; 21.06.2016
comment
Это сработало и для меня. не могли бы вы уточнить это? Почему он сортируется по-другому? - person Kostas; 28.12.2016
comment
Эта доза работает, но выводит ? для каждого символа, отличного от ascii, когда вывод является терминалом (плохая функция от ls проверяет, выводится ли он на терминал, работает при передаче). Вы можете исправить это с помощью конвейера в cat, использовать локаль C.UTF-8 (если ваша система поддерживает ее) и/или использовать флаг -b. А еще лучше вообще не использовать ls, лучше использовать ` - person 12431234123412341234123; 05.09.2017
comment
Это помогло мне обнаружить, что для меня проблема заключалась в том, что некоторые из моих имен файлов содержали дефис (-), а некоторые — короткое тире (–). ls сортирует дефисы перед тире. - person Jamy Mahabier; 04.02.2020

Прелесть инструментов *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 к команде сортировки.

person user491575    schedule 09.01.2011
comment
Что означает -k9,9? - person luckydonald; 06.12.2017
comment
Выяснил, это значит отсортировать столбец 9 до такого же столбца 9. Обычный вывод ls выглядит так: drwx------ 8 999 user 4.0K Feb 5 2017 file.txt, поэтому столбец 9 — это имена файлов. Если вы хотите игнорировать регистр, используйте --ignore-case при сортировке. - person luckydonald; 06.12.2017

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

В этом случае можно использовать следующий синтаксис:

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
person poney    schedule 15.04.2016
comment
Искал именно что-то подобное. Спасибо! - person Emoon; 12.02.2021

ВНИМАНИЕ: «а» стоит ПОСЛЕ «Z»:

$ сенсорный A.txt aa.txt Z.txt

$ ls

A.txt Z.txt aa.txt

person russian_spy    schedule 30.10.2009
comment
Это не всегда правда. Я точно не знаю обстоятельств, которые делают это неправдой, но на моей машине под управлением Ubuntu 12.04 вывод ls сортируется по алфавиту (без учета регистра). - person Patrick James McDougle; 03.01.2013
comment
Хороший улов! Похоже, он упорядочивает его на основе кода ASCII. За прописными буквами следуют строчные.. - person Kent Pawar; 11.04.2013
comment
Я заметил, что моя MacOS сортирует сначала цифры, затем прописные буквы, затем подчеркивание, а затем строчные буквы. Забавно, что они не чувствительны к регистру. С другой стороны, мой Debian чувствителен к регистру, но сортирует буквы нечувствительно, если нет ничьей, тогда побеждает нижний регистр! Пример: ABA.txt ABb.txt aBC.txt AbC.txt ABc.txt - person zk82; 15.12.2016
comment
Я тоже на МАК. я был разочарован, увидев тип сортировки A, Z, a, z. Я здесь, потому что предпочитаю А, А, Я, А. спасибо за ваш совет. попробуем решения normal здесь. - person nyxee; 22.02.2017

Со страницы руководства (для bash ls):

Сортировать записи в алфавитном порядке, если ни одна из опций -cftuSUX или --sort.

person jwoolard    schedule 18.05.2009
comment
Баша ls нет. сделай что лс - person Norbert Hartl; 18.05.2009
comment
@Norbert: Вы правы, но which ls удалось бы, даже если бы в bash был встроенный ls. Скорее сделайте builtin ls в bash, и получите ошибку. - person Pianosaurus; 18.05.2009
comment
@Norbert: which всегда возвращает путь. Используйте type ls, чтобы определить, что оболочка считает ls (встроенным, функциональным, исполняемым). - person ephemient; 18.05.2009

Утилита ls должна соответствовать стандарту IEEE Std 1003.1-2001 (POSIX.1) в котором говорится:

22027: он должен сортировать операнды каталога и операнды, не относящиеся к каталогу, отдельно в соответствии с последовательностью сортировки в текущей локали.

26027: По умолчанию формат не указан, но вывод должен быть отсортирован в алфавитном порядке по имени символа:

  • Имя библиотеки или объекта, если указано -A
  • Имя символа
  • Тип символа
  • Значение символа
  • Размер, связанный с символом, если применимо
person kenorb    schedule 13.04.2015

Проверьте свой файл .bashrc на наличие псевдонимов.

person Sujit    schedule 30.06.2010
comment
Можно просто ввести alias, чтобы проверить все текущие псевдонимы. - person Krzysztof Jabłoński; 07.04.2015

ls -X работает для этой цели, если вы применили псевдоним ls к более полезному значению по умолчанию.

person jezzo    schedule 02.04.2018

Можешь попробовать:

ls -lru

-u с -lt: сортировать и показывать время доступа;

person Avtar Sohi    schedule 23.11.2020

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

ls -h

person Rohit Gaikwad    schedule 19.05.2021