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

Pregunta:

Mientras intentaba aplicar ingeniería inversa al comando ls, encontré un comportamiento interesante. Cuando hago 3 archivos, foo.png , foopa.png y fooqa.png , ls los clasifica como foopa.png , foo.png y fooqa.png . También lo probé usando la extensión .gif y parece ser 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. g si fueran gy h. ( fooga.gif , luego foo.gif , luego fooha.gif )

¿Por qué ordena la salida de esta manera?

Respuesta:

Depende del orden de clasificación de su configuración regional:

>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 intercalació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 "palabras" por separado o simplemente ignorar estos separadores (que parece ser el caso aquí).

Tenga en cuenta que la configuración regional no UTF-8 también se 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 .

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım