Каталог не полностью отсортирован

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не сортируется правильно?

kojow7
источник
1
Это в системе Linux или Mac OS / BSD? ( lsВерсии разные.) Похоже, период игнорируется в целях сортировки, что интересно.
Wildcard
@Wildcard Это на Debian Linux
kojow7

Ответы:

27

LC_COLLATEс любым сопоставлением с поддержкой Юникода, например, en_US.UTF-8приводит к порядку сортировки, который игнорирует пунктуацию. Следовательно, populate.sqlсортирует как populatesqlпосле, populatersqlно прежде populatessql.

Если вы хотите, чтобы это поведение изменилось, попробуйте запустить его LC_COLLATE=C ls -al, и он будет отсортирован в порядке сортировки C (по определенным байтам без учета каких-либо кодовых точек или локалей).

Дэвид
источник
2
Интересный. Похоже ли это на последние версии Debian по умолчанию или есть параметр, который я бы изменил, чтобы включить это? Я не помню, чтобы когда-либо сталкивался с этой «проблемой» раньше?
kojow7
Я не знаю, насколько это было недавно или нет, но я верю, что языком по умолчанию всегда был C.
Дэвид
1
Когда ни одна из переменных LC_ *, LANG не установлена, языковой стандарт по умолчанию - это и всегда был C / POSIX, но большинство систем имеют настроенный языковой стандарт по умолчанию, и пользователи, как правило, также могут указать его во время входа в систему. Такое поведение сортировки локали в GNU libc, как в Debian, было таким уже более 10 лет.
Стефан Шазелас
Просто для справки, я попробовал новую установку Debian, и да, она по умолчанию игнорирует пунктуацию в порядке сортировки. В /etc/default/localeнем говорится LANG="en_US.UTF-8".
kojow7