Lista katalogów nie jest w pełni posortowana

18

Mam następujący wykaz katalogów w systemie Debian Linux. Jednak jedną dziwną rzeczą jest to, że plik populate.sql nie wydaje się być posortowany z resztą.

-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

Na początku myślałem, że może to być z powodu ukrytej postaci lub czegoś takiego, ale nie mogę myśleć o ukrytej postaci, która byłaby między ri s. Ponadto, jeśli wpiszesz vim populate.sqlw wierszu polecenia, otworzy poprawny plik, co jest kolejnym dowodem, że nie ma tam dziwnego znaku.

Wszelkie pomysły, dlaczego populate.sqlnie są poprawnie sortowane?

kojow7
źródło
1
Czy to jest w systemie Linux czy Mac OS / BSD? ( lsWersje są różne.) Wygląda na to, że kropka jest ignorowana do celów sortowania, co jest interesujące.
Wildcard
@Wildcard Jest na Debianie Linux
kojow7

Odpowiedzi:

27

LC_COLLATEz dowolnym zestawieniem obsługującym Unicode, np. en_US.UTF-8wyniki sortowania ignorują interpunkcję. W związku z tym populate.sqlsortuje jak populatesqlpo, populatersqlale przedtem populatessql.

Jeśli chcesz zobaczyć, jak to zachowanie się zmienia, spróbuj uruchomić LC_COLLATE=C ls -al, a zostanie ono posortowane w kolejności sortowania C (według określonych bajtów bez względu na punkty kodowe lub ustawienia regionalne).

David
źródło
2
Ciekawy. Czy najnowsze wersje Debiana są takie domyślnie, czy też jest ustawienie, które bym zmienił, aby to umożliwić? Nie przypominam sobie, aby kiedykolwiek wcześniej spotkałem się z tym „problemem”?
kojow7
Nie wiem, czy jest aktualny, czy nie, ale uważam, że domyślnym językiem zawsze był C.
David
1
Jeśli żadna z wartości LC_ * nie jest ustawiona, domyślnymi ustawieniami narodowymi są i zawsze były C / POSIX, ale większość systemów ma skonfigurowane domyślne ustawienia narodowe, a użytkownicy zazwyczaj mogą je określić również podczas logowania. To zachowanie sortowania ustawień narodowych GNU libc w systemie Debian jest takie od ponad 10 lat.
Stéphane Chazelas
Dla porównania, wypróbowałem nową instalację Debiana i tak, domyślnie ignoruje interpunkcję w porządku sortowania. W /etc/default/localetym mówi LANG="en_US.UTF-8".
kojow7