Как я могу исправить это поведение сортировки по умолчанию для ls
в терминале macOS? Я хочу, чтобы результаты были без учета регистра и в алфавитном порядке.
Вот пример, иллюстрирующий текущее и желаемое поведение при запуске ls
в каталоге с файлами / каталогами: Apple_, apple, Basket_, корзина
Текущее поведение:
Яблоко_
Корзина_
яблоко
корзина
Желаемое поведение:
Яблоко_
яблоко
Корзина_
корзина
Кто-нибудь знает, как этого добиться?
Вы можете отсортировать так:
$ 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
.
Также этот ответ не работает для меня в APFS, порядок сортировки фактически не идентифицируется (A *, D *, l *, s *, p *, w *, m *, p *, D *, M *,. .. вот что я получаю)
Это действительно сортирует результаты в алфавитном порядке, но при использовании флага `-la 'он меняет порядок файлов / каталогов с точкой (начинающихся с точки). У меня до сих пор нет рабочего решения для этого
Итак, @Yoric был очень близок, но содержание его функции было немного неправильным: он действительно сортировал результаты по алфавиту, но при использовании флага `-la 'он испортил порядок файлов / каталогов с точками (начинающиеся с точки).
Я нашел правильное решение, адаптировав его из следующего сообщения о переполнении стека.: Выполнение команды "ls" сортировки "a" перед "B" (по сравнению с a-> b-> A-> B)
~/
). (Этот файл запускается автоматически каждый раз при запуске оболочки). Это было бы:.bash_profile
, если не используется структура конфигурации.zshrc
при использовании zshls_sort() {
LC_COLLATE=en_US.utf8 ls "$@"
}
alias ls='ls_sort'
Спасибо @Yoric за то, что помог мне найти это решение!
Используйте "$@"
(включая двойные кавычки) вместо $1
- как написано, он не может обрабатывать несколько имен файлов / параметров в командной строке. Чтобы увидеть проблему, попробуйте ls *
и посмотрите, что произойдет.
Это не меняет сортировку для меня в macOS 10.14 (и, скорее всего, также в предыдущих версиях, начиная с APFS). У меня по умолчанию правильный locale
, но сортировка без учета регистра все еще не выполняется.
Да, я заметил, что это больше не работает. Было бы здорово, если бы кто-нибудь мог поделиться рабочим решением.
Спасибо, Йорик. Вы знаете, как сделать это поведение по умолчанию при запуске
ls
?