Al ordenar los nombres de archivo, ls
ignora los caracteres como -,_
. Esperaba que también usara esos caracteres en la clasificación.
Un ejemplo:
touch a1 a2 a-1 a-2 a_1 a_2 a.1 a.2 a,1 a,2
Ahora muestre estos archivos con ls -1
:
a1
a_1
a-1
a,1
a.1
a2
a_2
a-2
a,2
a.2
Lo que esperaba era algo como esto:
a1
a2
a,1
a,2
a.1
a.2
a_1
a_2
a-1
a-2
es decir, esperaba que los caracteres no alfanuméricos se tengan en cuenta al ordenar.
¿Alguien puede explicar este comportamiento? ¿Es este comportamiento obligatorio por un estándar? ¿O esto se debe a que la codificación es UTF-8?
Actualización: Parece que esto está relacionado con la clasificación UTF-8:
$ LC_COLLATE=C ls -1
a,1
a,2
a-1
a-2
a.1
a.2
a1
a2
a_1
a_2
[_-,.]
están siendo agrupados y de alguna manera semi-ignorados. No sé exactamente cómo o dónde se define dicha clasificación, pero debe ser un problema de clasificación, porque simplemente, y solo, cambiar la clasificación a C (vía LC_COLLATE=C ls -l
) es suficiente para darle el orden de clasificación que esperaba (suponiendo que LC_ALL
es no anulando LC_COLLATE
). Esto es válido para toda la gama de caracteres en el plano multilingüe básico Unicode ... He editado mi respuesta para incluir un script de ejemplo que lo
LC_COLLATE=C ls
?