Cree los siguientes archivos en un directorio.
$ touch .a .b a b A B 你好嗎
Mi ls
orden predeterminada ignora la presencia de puntos iniciales, mezclándolos con los otros archivos.
$ ls -Al
total 0
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 a
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 .a
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 A
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 b
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 .b
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 B
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:06 你好嗎
Yo puedo cambiar LC_COLLATE
a poner en primer lugar los dotfiles.
$ LC_COLLATE=C ls -Al
total 0
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 .a
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 .b
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 A
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 B
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 a
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 b
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:06 你好嗎
Por desgracia, esto hace que el orden de clasificación entre mayúsculas y minúsculas, es decir, A
y B
preceden a
y b
. ¿Hay alguna manera de imprimir archivos de puntos primero sin dejar de distinguir entre mayúsculas A
y minúsculas ( y a
preceder B
y b
)?
Editar: intentando modificar LC_COLLATE
Ninguna de las respuestas hasta ahora replica completamente la funcionalidad de ls
fácilmente. Posiblemente, podría incluir algunos de ellos en una función, pero esto tendría que incluir un código detallado sobre (p. Ej.) Cómo trabajar sin argumento frente a proporcionar un directorio como argumento. O cómo lidiar con una -d
bandera explícita .
Alternativamente, pensé que tal vez podría haber una mejor LC_COLLATE
para usar. Sin embargo, parece que no puedo hacer que eso funcione. Actualmente estoy usando LC_COLLATE="en_AU.UTF-8"
. Lo comprobé /usr/share/i18n/locales/en_AU
(aunque no estoy seguro de si este es el archivo correcto, ya que no puedo ver ninguna referencia UTF-8
); Encontré lo siguiente.
LC_COLLATE
copy "iso14651_t1"
END LC_COLLATE
/usr/share/i18n/locales/iso14651_t1
contiene copy "iso14651_t1_common"
. Finalmente /usr/share/i18n/locales/iso14651_t1_common
contiene
<U002E> IGNORE;IGNORE;IGNORE;<U002E> # 47 .
Eliminé esta línea, corrí sudo locale-gen
y reinicié mi computadora. Lamentablemente, esto no cambió nada.