La liste des répertoires n'est pas entièrement triée

18

J'ai la liste de répertoires suivante sur un système Debian Linux. Cependant, une chose étrange est que le fichier populate.sql ne semble pas être trié avec le reste.

-rw-r--r-- 1 user1 user1 10004 Jul 28 13:16 populate2.sql
-rw-r--r-- 1 user1 user1 10244 Jul 28 13:16 populate3.sql
-rw-r--r-- 1 user1 user1 10359 Jul 28 13:16 populate4.sql
-rw-r--r-- 1 user1 user1 11618 Jul 28 13:16 populate5.sql
-rw-r--r-- 1 user1 user1 11654 Jul 28 13:17 populate6.sql
-rw-r--r-- 1 user1 user1 12198 Jul 30 16:20 populate7.sql
-rw-r--r-- 1 user1 user1 12286 Aug 10 00:10 populate8.sql
-rw-r--r-- 1 user1 user1 12331 Aug 19 08:48 populate9.sql
-rw-r--r-- 1 user1 user1 12401 Aug 20 14:58 populatea.sql
-rw-r--r-- 1 user1 user1 12460 Aug 22 01:09 populateb.sql
-rw-r--r-- 1 user1 user1 12503 Aug 22 17:13 populatec.sql
-rw-r--r-- 1 user1 user1 13341 Aug 23 23:23 populated.sql
-rw-r--r-- 1 user1 user1 13414 Aug 27 23:01 populatee.sql
-rw-r--r-- 1 user1 user1 16064 Aug 31 00:03 populatef.sql
-rw-r--r-- 1 user1 user1 17529 Sep 16 15:38 populateg.sql
-rw-r--r-- 1 user1 user1 19348 Sep 19 22:50 populateh.sql
-rw-r--r-- 1 user1 user1 21033 Sep 27 20:46 populatei.sql
-rw-r--r-- 1 user1 user1 21024 Sep 28 00:02 populatej.sql
-rw-r--r-- 1 user1 user1 22505 Sep 28 22:55 populatek.sql
-rw-r--r-- 1 user1 user1 23831 Oct  5 21:24 populatel.sql
-rw-r--r-- 1 user1 user1 23665 Nov  2 22:16 populatem.sql
-rw-r--r-- 1 user1 user1 23513 Nov  4 21:53 populaten.sql
-rw-r--r-- 1 user1 user1 27191 Nov 19 14:55 populateo.sql
-rw-r--r-- 1 user1 user1 30142 Nov 28 17:51 populatep.sql
-rw-r--r-- 1 user1 user1 30853 Dec 10 14:49 populateq.sql
-rw-r--r-- 1 user1 user1 33690 Dec 11 23:43 populater.sql
-rw-r--r-- 1 user1 user1  9945 Jul 28 13:16 populate.sql
-rw-r--r-- 1 user1 user1 38696 Jan 16 22:27 populates.sql
-rw-r--r-- 1 user1 user1 38696 Jan 16 22:27 populatet.sql

Au début, je pensais que c'était peut-être à cause d'un personnage caché ou quelque chose, mais je ne peux pas penser à un personnage caché qui se situerait entre r et s. De plus, si je tape vim populate.sqldans l'invite de commande, il ouvre le fichier correct, ce qui est une preuve supplémentaire qu'il n'y a pas de caractère étrange.

Des idées pourquoi populate.sqln'est pas trié correctement?

kojow7
la source
1
Est-ce sur un système Linux ou Mac OS / BSD? (Les lsversions sont différentes.) Il semble presque que la période soit ignorée à des fins de tri, ce qui est intéressant.
Wildcard
@Wildcard C'est sur Debian Linux
kojow7

Réponses:

27

LC_COLLATEavec tout classement compatible Unicode, par exemple, en_US.UTF-8entraîne un ordre de tri qui ignore la ponctuation. Par conséquent, populate.sqltrie comme populatesqlaprès populatersqlmais avant populatessql.

Si vous souhaitez voir ce comportement changer, essayez de l'exécuter LC_COLLATE=C ls -alet il sera trié dans l'ordre de tri C (par octets spécifiques sans tenir compte des points de code ou des paramètres régionaux).

David
la source
2
Intéressant. Est-ce que les versions récentes de Debian sont comme ça par défaut ou y a-t-il un paramètre que j'aurais changé pour l'activer? Je ne me souviens pas avoir déjà rencontré ce «problème» auparavant?
kojow7
Je ne sais pas à quel point c'est récent ou pas, mais je crois que la locale par défaut était toujours C.
David
1
Lorsqu'aucune des variables LC_ *, LANG n'est définie, la locale par défaut est et a toujours été C / POSIX, mais la plupart des systèmes ont une locale par défaut configurée et les utilisateurs peuvent généralement en spécifier une au moment de la connexion également. Ce comportement de tri de la libc locale GNU tel que trouvé sur Debian a été comme ça pendant certainement plus de 10 ans.
Stéphane Chazelas
Juste pour référence, j'ai essayé une nouvelle installation Debian et oui, elle ignore la ponctuation dans son ordre de tri par défaut. En /etc/default/localeelle dit LANG="en_US.UTF-8".
kojow7