¿Ordenar archivos alfabéticamente con ls en Linux?

¿Ordenar archivos alfabéticamente con ls en Linux?

Estoy intentando ordenar archivos (incluidos los archivos ocultos) alfabéticamente en orden natural en Ubuntu Xenial.

Llegué a esto:

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

¿Cómo puedo hacer que la clasificación no distinga entre mayúsculas y minúsculas y ordenar por letra en lugar de por posición en la tabla ASCII (que supongo que es lo que hace que Z esté antes de a)...?

Respuesta1

El orden de clasificación depende de la ubicación. La configuración regional predeterminada Cse ordena como en su ejemplo:

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

Pero muchos otros dan prioridad a las letras, y ignoran el caso y los puntos principales:

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

(No me sorprendería que algunos lugares también consideraran personajes comovywcomo iguales, pero no se me ocurre ninguno que haga eso).

Por supuesto, es necesario tener esas configuraciones regionales en el sistema. locale -adebería mostrar las configuraciones regionales que se pueden utilizar actualmente en el sistema, y ​​puede usarlas locale-gen $localenamepara generar las que faltan. Luego está dpkg-reconfigure localeslo que muestra una lista donde puede elegir qué configuraciones regionales generar.

Respuesta2

Establecer $LC_COLLATEun valor apropiado cotejará los nombres apropiadamente.

LC_COLLATE=en_US ls -l1va

Además, se puede configurar en el script de inicio del shell para que entre en vigor cada vez.

export LC_COLLATE=en_US

Respuesta3

A partir de Ubuntu 19.10, la configuración LC_COLLATE=Cparece ser insuficiente, pero la configuración LC_ALL=Cparece funcionar (de modo que lsusará el orden ASCII para los nombres de archivos y directorios).

Respuesta4

La respuesta no fue fácil de encontrar, pero estaba aquí en Stack Exchange.

La "solución" implica editar /usr/share/i18n/locales/iso14651_t1_common y cambiar la línea

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

en:

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

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

información relacionada