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 C
se 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 -a
debería mostrar las configuraciones regionales que se pueden utilizar actualmente en el sistema, y puede usarlas locale-gen $localename
para generar las que faltan. Luego está dpkg-reconfigure locales
lo que muestra una lista donde puede elegir qué configuraciones regionales generar.
Respuesta2
Establecer $LC_COLLATE
un 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=C
parece ser insuficiente, pero la configuración LC_ALL=C
parece funcionar (de modo que ls
usará 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 .