Сортировать файлы по алфавиту с помощью ls в Linux?

Сортировать файлы по алфавиту с помощью ls в Linux?

Я пытаюсь отсортировать файлы (включая скрытые) в алфавитном порядке в естественном порядке в Ubuntu Xenial.

Я дошел до этого:

ls -l1va

Что печатает:

.
..
.ICEauthority
.Private
.Xauthority
.atom
.babel.json
.bashrc
.bash_history
.bash_logout
.cache
.cargo
.config
.dbeaver4
.dbeaver-drivers
.dbus
.docker
.eclipse
.ecryptfs
.electron
.fltk
.gconf
.gem
.gimp-2.8
.gitconfig
.gksu.lock
.gnome
.gnome2
.gnome2_private
.gnupg
.local
.mozilla
.nano
.node-gyp
.npm
.nvm
.pki
.profile
.putty
.recently-used
.selected_editor
.ssh
.sudo_as_admin_successful
.thumbnails
.v8flags.6.2.414.32-node.8.4654dce123559e380233361202560f0e.json
.vmware
.vscode
.vscode-insiders
.wget-hsts
.xsession-errors
.xsession-errors.old
.yarn
.yarnrc
Desktop
Documents
Downloads
Music
Pictures
Projects
Public
Templates
Videos
bin
mnt
tmp

Как сделать так, чтобы сортировка не учитывала регистр, и сортировать по букве, а не по позиции в таблице ASCII (что, как я предполагаю, и заставляет Z стоять перед a)?

решение1

Порядок сортировки зависит от локали. CЛокаль по умолчанию сортирует так, как в вашем примере:

$ LC_COLLATE=C ls -A
.hidden  Zappa  aardvark  vent  water  zebra

Однако многие другие отдают приоритет буквам и игнорируют регистр и начальные точки:

$ LC_COLLATE=en_US.UTF-8 ls -A
aardvark  .hidden  vent  water  Zappa  zebra

(Я бы не удивился, если бы в некоторых местах также рассматривались такие персонажи, каквиж(как равные, но я не могу придумать ни одного, который бы это делал.)

Конечно, вам нужно иметь эти локали в системе. locale -aдолжен показать локали, которые в настоящее время доступны для использования в системе, и вы можете использовать их locale-gen $localenameдля генерации тех, которых вам не хватает. Затем есть , dpkg-reconfigure localesкоторый показывает список, где вы можете выбрать, какие локали генерировать.

решение2

Установка $LC_COLLATEсоответствующего значения позволит правильно отсортировать имена.

LC_COLLATE=en_US ls -l1va

Кроме того, его можно настроить в скрипте запуска оболочки, чтобы он вступал в силу каждый раз.

export LC_COLLATE=en_US

решение3

Начиная с Ubuntu 19.10, настройка, LC_COLLATE=Cпохоже, недостаточна, но она LC_ALL=Cработает (например, lsбудет использовать порядок ASCII для имен файлов и каталогов).

решение4

Ответ было нелегко найти, но он нашелся здесь, на Stack Exchange.

«Исправление» включает в себя редактирование /usr/share/i18n/locales/iso14651_t1_common и изменение строки

<U002E> IGNORE;IGNORE;IGNORE;<U002E> # 47 .

в:

<U002E> <RES-1>;IGNORE;IGNORE;<U002E> # 47 .

Видеть:https://unix.stackexchange.com/a/361006/262190

Связанный контент