¿Por qué el comando `ls` ordena archivos de esta manera?

¿Por qué el comando `ls` ordena archivos de esta manera?

Mientras intentaba aplicar ingeniería inversa al comando ls, encontré un comportamiento interesante. Cuando creo 3 archivos, foo.png, foopa.pngy fooqa.png, ls los ordena como foopa.png, foo.pngy fooqa.png. También lo probé usando la extensión .gif y parece que sucede cuando pyq se reemplazan por la primera letra de la extensión y la siguiente letra del alfabeto; así en el caso de .gramosi fuera g y h. ( fooga.gif, luego foo.gifluego fooha.gif)

¿Por qué ordena la salida de esta manera?

Respuesta1

Depende del orden de clasificación de su localidad:

>LANG=en_IE.UTF-8 ls -1 foo*
foopa.png
foo.png
fooqa.png

>LANG=C ls -1 foo* 
foo.png
foopa.png
fooqa.png

También puede usar la variable LC_COLLATE en lugar de LANG y usar la configuración regional POSIX en lugar de la C.

El orden de clasificación C es puramente alfabético (orden ASCII). Otros órdenes de clasificación (como el inglés) pueden considerar espacios y caracteres especiales como puntos como separadores y manejar las "palabras" por separado o simplemente ignorar estos separadores (que parece ser el caso aquí).

Tenga en cuenta que la configuración regional que no es UTF-8 también ordena usando ASCII alfabético:

>LANG=en_IE ls -1 foo*
foo.png
foopa.png
fooqa.png

Después de investigar un poco más, parece que ignorar la puntuación es una característica común de las configuraciones regionales compatibles con Unicode como las *.UTF-8.

información relacionada