Список каталогів не повністю відсортований


18

У мене є такий список каталогів у системі Debian Linux. Однак, одна дивна річ полягає в тому, що файл populate.sql не здається упорядкованим з рештою.

-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

Спочатку я думав, що це може бути через прихованого персонажа чи чогось іншого, але я не можу придумати прихованого персонажа, який прийшов би між r і s. Крім того, якщо я набираю vim populate.sqlв командному рядку, він відкриває правильний файл, що є додатковим свідченням, там немає дивного символу.

Будь-які ідеї, чому populate.sqlйого не сортують правильно?


1
Це в системі Linux чи Mac OS / BSD? ( lsВерсії різні.) Схоже, період ігнорується з метою сортування, що цікаво.
Wildcard

@Wildcard Це на Debian Linux
kojow7

Відповіді:


27

LC_COLLATEз будь-яким зіставленням Unicode, наприклад, en_US.UTF-8призводить до порядку сортування, який ігнорує пунктуацію. Отже, populate.sqlсортує як populatesqlпісля, populatersqlале раніше populatessql.

Якщо ви хочете, щоб ця поведінка змінилася, спробуйте запустити LC_COLLATE=C ls -al, і вона буде сортована в порядку сортування C (за конкретними байтами, не враховуючи жодних точок коду чи локалів).


2
Цікаво. Чи є останні версії Debian такими за замовчуванням чи є налаштування, яке я змінив би, щоб увімкнути це? Я не пам’ятаю, ніколи раніше стикався з цією «проблемою»?
kojow7

Я не знаю, наскільки це нещодавно чи ні, але я вважаю, що мовою за замовчуванням завжди було C.
David

1
Коли жодна з змінних LC_ *, LANG не встановлена, локальним мовою за замовчуванням є і завжди був C / POSIX, але для більшості систем налаштовано локаль за замовчуванням, і користувачі, як правило, можуть вказати його також під час входу. Таке поведінка щодо сортування локальної локалізації GNU, як виявлено на Debian, було подібним вже протягом 10 років.
Стефан Шазелас

Для довідки я спробував нову установку Debian, і так, він ігнорує пунктуацію в своєму порядку сортування за замовчуванням. У /etc/default/localeньому сказано LANG="en_US.UTF-8".
kojow7
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.