Al ordenar los nombres de archivo, lsignora 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_ALLes 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?