我有以下文件:
$ 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
Dolphin 17.12.3(Kubuntu 18.04 的默认版本)的选项(Dolphin 首选项 > 常规 > 排序模式)时,我得到了不同的排序顺序,如下Name
图所示的列中所示:
我的问题:Dolphin 如何实现这种排序?
这海豚手册没有太多要说的:
排序模式控制视图中项目的排序方式。如果启用自然排序,则三个示例文件的排序顺序将是
文件1,
文件2,
文件10。
如果禁用此选项,则将使用正常的字母排序(区分大小写或不区分大小写),从而导致排序顺序
文件1,
文件10,
文件2。
答案1
“自然排序”检测文件名中的数字并对文件名的这一部分使用数字排序,因此 010.txt 和 10.txt 位于 4.txt 之后(10 > 4)。
1 < 2 < 10,因此 mov001 和 mov01A 位于 mov002 和 mov010 之前。
0 < 1 < 10,因此 _0mov00A < _1mov00A < _010.txt
ETC。
答案2
人类排序:自然排序顺序,讨论了自然排序的实用性,但没有涉及如何将以前导文件_
名列在其他文件之前。
答案我如何让 ls 首先对下划线字符进行排序?解决主要_
问题。
使用的解决方案shell 扩展绕过任何排序方式ls
:
ls -lf _* [!_]*
因此,对于问题中的文件,
ls -lf -1 _* [!_]*
提供与 Dolphin 自然排序相同的排序结果:
$ ls -lf -1 _* [!_]*
_010.txt
_0mov00A
_1mov00A
_mov00A
010.txt
01.txt
10.txt
1.txt
2.txt
3.txt
4.txt
mov001
mov002
mov00a
mov00A
mov00aA
mov00B
mov010
mov01A
$
我不知道这是否与 Dolphin 所采用的自然排序机制完全相同。