我有以下文件:
$ ls
_010.txt 01.txt 10.txt 1.txt 3.txt mov001 mov00a _mov00A mov00B mov01A
010.txt _0mov00A _1mov00A 2.txt 4.txt mov002 mov00A mov00aA mov010
$
我单独使用ls -1
或者前面有各种LANG=
选项,文件顺序如下图:
ls -1 |
ls -1 LANG=en_GB.utf8 | ls -1 LANG=C
ls -1 LANG=en_US.utf8 | ls -1 LC_ALL=C
---------------------------------------
_010.txt | 01.txt
010.txt | 010.txt
01.txt | 1.txt
_0mov00A | 10.txt
10.txt | 2.txt
_1mov00A | 3.txt
1.txt | 4.txt
2.txt | _010.txt
3.txt | _0mov00A
4.txt | _1mov00A
mov001 | _mov00A
mov002 | mov001
mov00a | mov002
mov00A | mov00A
_mov00A | mov00B
mov00aA | mov00a
mov00B | mov00aA
mov010 | mov010
mov01A | mov01A
但是,当我使用Natural sorting
Kubuntu 18.04 的默认版本 Dolphin 17.12.3 的选项(Dolphin Preferences > General > Sorting Mode)时,我得到了不同的排序顺序,如下Name
图所示:
我的问题:Dolphin 是如何实现这种排序的?
Dolphin Handbook没什么好说的:
排序模式控制项目在视图中的排序方式。如果启用自然排序,三个示例文件的排序顺序将是
文件1,
文件2,
文件 10。
如果禁用此选项,将使用正常的字母排序区分大小写或不区分大小写,从而导致排序顺序
文件1,
文件10,
文件 2。
“自然排序”检测文件名中的数字并在这部分文件名上使用数字排序,因此 010.txt 和 10.txt 位于 4.txt 之后(10 > 4)。
1 < 2 < 10,所以 mov001 和 mov01A 在 mov002 和 mov010 之前。
0 < 1 < 10,因此 _0mov00A < _1mov00A < _010.txt
等等
Sorting for Humans : Natural Sort Order讨论了自然排序的用处,但不涉及如何将带前导
_
的文件名列在其他文件之前。How do I make ls sort underscore characters first的答案?解决主导
_
问题。使用外壳扩展绕过任何排序的解决方案
ls
具有:因此,对于问题中的文件,
提供与 Dolphin 的自然排序相同的排序结果:
我不知道这是否与 Dolphin 用于提供自然排序的机制完全相同。