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

0

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

Eu cheguei a isto:

ls -l1va

Quais impressões:

.
..
.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 a classificação não diferenciar maiúsculas de minúsculas e classificar por letra em vez de posicionar na tabela ASCII (que eu presumo que seja o que faz com que o Z seja antes de a) ...?

    
por nkkollaw 22.11.2017 / 21:05

3 respostas

4

A ordem de classificação depende da localidade. O C locale padrão é classificado 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 períodos principais:

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

(Eu não ficaria surpreso se algumas localidades também considerassem caracteres como v e w como iguais, mas não consigo criar uma que faça isso. )

Claro, você precisa ter essas localidades no sistema. locale -a deve mostrar as localidades atualmente utilizáveis no sistema, e você pode usar locale-gen $localename para gerar as que está faltando. Então, há dpkg-reconfigure locales que mostra uma lista onde você pode escolher quais localidades gerar.

    
por 22.11.2017 / 22:12
1

A definição de $LC_COLLATE para um valor apropriado agrupará os nomes de forma adequada.

LC_COLLATE=en_US ls -l1va

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

export LC_COLLATE=en_US
    
por 22.11.2017 / 21:11
0

A resposta não foi fácil de encontrar, mas foi 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 .

para:

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

Veja: link

    
por 22.11.2017 / 23:19