在对文件名进行排序时,请ls
忽略诸如之类的字符-,_
。我希望它也可以使用这些字符进行排序。
一个例子:
touch a1 a2 a-1 a-2 a_1 a_2 a.1 a.2 a,1 a,2
现在显示以下文件ls -1
:
a1
a_1
a-1
a,1
a.1
a2
a_2
a-2
a,2
a.2
我所期望的是这样的:
a1
a2
a,1
a,2
a.1
a.2
a_1
a_2
a-1
a-2
即我希望排序时要考虑非字母数字字符。
谁能解释这种行为?此行为是由标准强制执行的吗?还是因为编码为UTF-8?
更新:看来这与UTF-8排序有关:
$ LC_COLLATE=C ls -1
a,1
a,2
a-1
a-2
a.1
a.2
a1
a2
a_1
a_2
问题不在于ASCII和UTF-8是相同的,而是UTF-8具有自己的排序规则(排序)。
—
丹尼尔·库尔曼2012年
是的,确实
—
Peter.O 2012年
[_-,.]
是正在分组并且以某种方式被半忽略。我不知道如何或在何处定义这种排序规则,但这肯定是一个排序规则问题,因为简单而唯一地将排序规则更改为C(通过LC_COLLATE=C ls -l
)就足以为您提供期望的排序顺序(假设LC_ALL
是不覆盖LC_COLLATE
)。这适用于Unicode Basic Multilingual Plane中的所有字符...我已经编辑了答案,以包含一个示例脚本来证明这一点……
如果您不喜欢它的工作方式,则可以创建一个别名并将其放在〜/ .profile中:alias ls ='LC_COLLATE = C ls'</ kbd>
—
jippie 2012年
LC_COLLATE=C ls
怎样?