Classificar arquivos em ordem alfabética com ls no Linux?

Classificar arquivos em ordem alfabética com ls no Linux?

Estou tentando classificar os arquivos (incluindo arquivos ocultos) em ordem alfabética em ordem natural no Ubuntu Xenial.

Eu cheguei nisso:

ls -l1va

Que imprime:

.
..
.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

Como posso fazer com que a classificação não diferencie maiúsculas de minúsculas e classifique por letra em vez de posição na tabela ASCII (que presumo ser o que faz Z estar antes de a) ..?

Responder1

A ordem de classificação depende da localidade. A localidade padrão Cé classificada como no seu exemplo:

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

Mas muitos outros dão prioridade às letras e ignoram o caso e os pontos iniciais:

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

(Eu não ficaria surpreso se alguns locais também considerassem personagens comoveccomo iguais, mas não consigo encontrar um que faça isso.)

Claro, você precisa ter essas localidades no sistema. locale -adeve mostrar as localidades que estão atualmente utilizáveis ​​no sistema e você pode usar locale-gen $localenamepara gerar aquelas que estão faltando. Depois, há dpkg-reconfigure localesuma lista onde você pode escolher quais localidades gerar.

Responder2

Definir $LC_COLLATEum valor apropriado agrupará os nomes adequadamente.

LC_COLLATE=en_US ls -l1va

Além disso, ele pode ser definido no script de inicialização do shell para ter efeito sempre.

export LC_COLLATE=en_US

Responder3

A partir do Ubuntu 19.10, a configuração LC_COLLATE=Cparece ser insuficiente, mas a configuração LC_ALL=Cparece funcionar (de forma que lsusará a ordem ASCII para nomes de arquivos e diretórios).

Responder4

A resposta não foi fácil de encontrar, mas estava aqui no Stack Exchange.

A "correção" envolve editar /usr/share/i18n/locales/iso14651_t1_common e alterar a linha

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

em:

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

Ver:https://unix.stackexchange.com/a/361006/262190

informação relacionada