目录列表未完全排序


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版本不同。)为了排序目的,似乎几乎忽略了句点,这很有趣。
通配符'18

@Wildcard它在Debian Linux上
kojow7 '18

Answers:


27

LC_COLLATE与任何支持Unicode的排序规则一起使用,例如,en_US.UTF-8导致排序顺序忽略标点符号。因此,populate.sql排序为populatesqlafter populatersql之前populatessql

如果您希望看到这种行为更改,请尝试运行LC_COLLATE=C ls -al,它将按照C排序顺序进行排序(按特定字节进行排序,而不考虑任何代码点或语言环境)。


2
有趣。默认情况下,Debian的最新版本是这样吗,或者是否有我要更改为启用该设置的设置?我不记得曾经遇到过这个“问题”吗?
kojow7

我不知道它是最近的时间,但我确实相信默认的语言环境过去一直是C。–
David

1
如果未设置LC _ *,LANG变量,则默认语言环境始终为C / POSIX,但是大多数系统都配置了默认语言环境,用户通常也可以在登录时指定一个。在Debian上发现的GNU libc语言环境排序行为已经有十多年的历史了。
斯特凡Chazelas

仅供参考,我确实尝试了新的Debian安装,是的,默认情况下,它确实按其排序顺序忽略了标点符号。在/etc/default/locale上面说LANG="en_US.UTF-8"
kojow7
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.