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.

$@.Se puede utilizar un orden de publicación de la cáscara en su lugar (que puede no implicar orden de clasificación de la configuración regional;
bash, AT & Tksh,yash,tcshyzshdar los resultados esperados,mkshydash. No lofishparece dar una orden de mayúsculas y minúsculas, pero da resultados diferentes cuando hay no ASCII caracteres):Esto proporciona
lsuna lista explícita de archivos (y directorios) para enumerar, y desactivalsla ordenación (-Uque es una extensión de GNU).Hay algunas advertencias, dependiendo del caparazón que estés usando.
zsh, lanomatchopción predeterminada hará que el comando falle si el directorio no contiene archivos ocultos y no ocultos; podría deshabilitarlonomatchpara evitar eso, pero sería mejor hacerlo en suset -o cshnullgloblugar (y el comando fallará solo si ninguno de los globos coincide con(t)cshlos shells de Unix anteriores o anteriores).zsh,pdkshy su derivada yfish,.*la expansión de, no incluye.y.., así que esto coincidels -Al. Con otros proyectiles.y..están incluidos para que coincidals -al. En el último caso, necesitaría cambiar los patrones globales para excluir.y..(ls -dUl -- ..?* .[!.]* *).fish,(t)cshozsh, si alguno de los patrones globales no coincide con nada,lsproducirá un mensaje de error; puede evitar esto ya sea configurando lanullglobopción (enbashozshal menos), o redirigiendostderra/dev/null(ls -dUl -- ..?* .[!.]* * 2>/dev/null). Si lo usanullglob, tenga cuidado con el comportamiento potencialmente sorprendente que causa (vea Shell comiendo caracteres `?` ).fishse comporta comobashcon,nomatchexcepto que cuando es interactivo, se emitirá un mensaje de advertencia para cada globo que no tiene coincidencia.(¡Gracias a Stéphane Chazelas por todos los comentarios!)
fuente
mkshy,dashpor ejemplo, no clasificará entre mayúsculas y minúsculas.-U(es decir, sin clasificar) es una extensión GNU. Algunas otraslsimplementaciones como FreeBSD tienen un-Upero no es para una lista sin clasificar.ls, necesita--antes.*ya que esa implementación acepta opciones después de argumentos (a menos que POSIXLY_CORRECT esté en el entorno)lscomo argumento.[!.]es correcto. Ver pubs.opengroup.org/onlinepubs/9699919799/utilities/… . Algunos (¿la mayoría?) Shells permiten^como sinónimo de!globos de clase de caracteres negados. En cualquier caso, prefiero.[!.] .??* *que sea un poco más comprensible que.[!.]* ..?* *Simplemente puede usar dos
lscomandos separados :A diferencia de las otras respuestas hasta ahora, este enfoque muestra los archivos de puntos primero evitando las entradas
.y.., luego las entradas restantes enlsorden alfabético.Las respuestas de @StephenKitt podrían mejorarse para lograr el mismo resultado:
fuente
lscomo argumento. (FWIW estoy usando zsh, pero esto es útil para bash-people, supongo).Puedes jugar con las opciones de comando ls . Prueba esto:
Dónde:
fuente
-Xbandera se ordena por la extensión después de., que es totalmente diferente. Además, los archivos están en orden alfabético inverso. Además, aunque los archivos de puntos son los primeros para mi ejemplo, no funcionará en todos los casos (por ejemploa.bc.d.a.c). Además, has usado en-alugar de-A.