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 -a
deve mostrar as localidades que estão atualmente utilizáveis no sistema e você pode usar locale-gen $localename
para gerar aquelas que estão faltando. Depois, há dpkg-reconfigure locales
uma lista onde você pode escolher quais localidades gerar.
Responder2
Definir $LC_COLLATE
um 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=C
parece ser insuficiente, mas a configuração LC_ALL=C
parece funcionar (de forma que ls
usará 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 .