Терминал macOS: `ls` сортирует результаты сначала с заглавных букв

Как я могу исправить это поведение сортировки по умолчанию для ls в терминале macOS? Я хочу, чтобы результаты были без учета регистра и в алфавитном порядке.

Вот пример, иллюстрирующий текущее и желаемое поведение при запуске ls в каталоге с файлами / каталогами: Apple_, apple, Basket_, корзина

Текущее поведение:

Яблоко_

Корзина_

яблоко

корзина

Желаемое поведение:

Яблоко_

яблоко

Корзина_

корзина


Кто-нибудь знает, как этого добиться?

Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
703
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете отсортировать так:

$ mkdir testdir && cd testdir
$ touch apple basket Apple_ Basket_
$ ls | LC_COLLATE=C sort --ignore-case

Результат (на самом деле не совсем ожидаемый результат):

Apple
apple_
basket
Basket_

ОБНОВИТЬ

Чтобы сделать его поведением по умолчанию для ls, вы можете добавить этот фрагмент кода в файл ~/.bash_profile (он вступит в силу после открытия нового окна терминала):

ls_sort() {
  ls $1 | LC_COLLATE=C sort --ignore-case
}
alias ls='ls_sort'

Фактически вы можете назвать псевдоним lss вместо ls в последней строке выше, чтобы не потерять исходное поведение ls.

Спасибо, Йорик. Вы знаете, как сделать это поведение по умолчанию при запуске ls?

Liran H 18.12.2018 15:09

Я обновил свое сообщение, сделав его поведением по умолчанию для ls.

Yoric 18.12.2018 16:08

Также этот ответ не работает для меня в APFS, порядок сортировки фактически не идентифицируется (A *, D *, l *, s *, p *, w *, m *, p *, D *, M *,. .. вот что я получаю)

Marius Hofert 31.03.2019 13:17

Это действительно сортирует результаты в алфавитном порядке, но при использовании флага `-la 'он меняет порядок файлов / каталогов с точкой (начинающихся с точки). У меня до сих пор нет рабочего решения для этого

Liran H 12.04.2021 09:27
Ответ принят как подходящий

Это больше не работает

Итак, @Yoric был очень близок, но содержание его функции было немного неправильным: он действительно сортировал результаты по алфавиту, но при использовании флага `-la 'он испортил порядок файлов / каталогов с точками (начинающиеся с точки).

Я нашел правильное решение, адаптировав его из следующего сообщения о переполнении стека.: Выполнение команды "ls" сортировки "a" перед "B" (по сравнению с a-> b-> A-> B)

Шаги:

  1. Откройте / создайте файл профиля оболочки в вашем домашнем каталоге (~/). (Этот файл запускается автоматически каждый раз при запуске оболочки). Это было бы:
  • .bash_profile, если не используется структура конфигурации
  • .zshrc при использовании zsh
  1. Добавьте следующий код

ls_sort() {
  LC_COLLATE=en_US.utf8 ls "$@"
}

alias ls='ls_sort'

  1. Перезагрузите Терминал

Спасибо @Yoric за то, что помог мне найти это решение!

Используйте "$@" (включая двойные кавычки) вместо $1 - как написано, он не может обрабатывать несколько имен файлов / параметров в командной строке. Чтобы увидеть проблему, попробуйте ls * и посмотрите, что произойдет.

Gordon Davisson 18.12.2018 19:05

Это не меняет сортировку для меня в macOS 10.14 (и, скорее всего, также в предыдущих версиях, начиная с APFS). У меня по умолчанию правильный locale, но сортировка без учета регистра все еще не выполняется.

Marius Hofert 31.03.2019 13:14

Да, я заметил, что это больше не работает. Было бы здорово, если бы кто-нибудь мог поделиться рабочим решением.

Liran H 31.03.2019 13:52

Другие вопросы по теме