Cree los siguientes archivos en un directorio.
$ touch .a .b a b A B 你好嗎
Mi lsorden 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, Ay Bpreceden ay b. ¿Hay alguna manera de imprimir archivos de puntos primero sin dejar de distinguir entre mayúsculas Ay minúsculas ( y apreceder By b)?
Editar: intentando modificar LC_COLLATE
Ninguna de las respuestas hasta ahora replica completamente la funcionalidad de lsfá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 -dbandera explícita .
Alternativamente, pensé que tal vez podría haber una mejor LC_COLLATEpara 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_t1contiene copy "iso14651_t1_common". Finalmente /usr/share/i18n/locales/iso14651_t1_commoncontiene
<U002E> IGNORE;IGNORE;IGNORE;<U002E> # 47 .
Eliminé esta línea, corrí sudo locale-geny reinicié mi computadora. Lamentablemente, esto no cambió nada.