Lors du tri des noms de fichiers, lsignore les caractères comme -,_. Je m'attendais à ce qu'il utilise également ces caractères dans le tri.
Un exemple:
touch a1 a2 a-1 a-2 a_1 a_2 a.1 a.2 a,1 a,2
Affichez maintenant ces fichiers avec ls -1:
a1
a_1
a-1
a,1
a.1
a2
a_2
a-2
a,2
a.2
Je m'attendais à quelque chose comme ça:
a1
a2
a,1
a,2
a.1
a.2
a_1
a_2
a-1
a-2
c'est-à-dire que je m'attendais à ce que les caractères non alphanumériques soient pris en compte lors du tri.
Quelqu'un peut-il expliquer ce comportement? Ce comportement est-il imposé par une norme? Ou est-ce dû au fait que l'encodage est UTF-8?
Mise à jour: Il semble que cela soit lié au tri 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
[_-,.]sont regroupés et en quelque sorte semi-ignorés. Je ne sais pas exactement comment ou où une telle collecte est définie, mais il doit être un problème de classement, parce que tout simplement, et seulement, en changeant la collation C (via LC_COLLATE=C ls -l) est suffisant pour vous donner l'ordre de tri que vous attendiez ( en supposant que LC_ALLest pas prioritaire LC_COLLATE). Cela est vrai pour toute la gamme de caractères dans le plan multilingue de base Unicode ... J'ai modifié ma réponse pour inclure un exemple de script qui
LC_COLLATE=C ls?