我有以下文件:
$ 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
但是,当我使用海豚17.12.3的Natural sorting
选项(海豚首选项>常规>排序模式)(这是Kubuntu18.04的默认版本)时,我得到了一个不同的排序顺序,如下图中的Name
列所示:
我的问题是:海豚是如何实现这种分类的?
海豚手册没有什么可说的:
排序模式控制如何在视图中排序项。如果启用了自然排序,那么三个示例文件的排序顺序将是File1、File2和File10。如果禁用此选项,将使用正常的字母排序区分大小写或不区分大小写,这将导致排序顺序File1、File10、File2。
发布于 2018-05-26 12:33:04
人类排序:自然排序顺序,讨论了自然排序的有用性,但没有讨论如何在其他文件之前列出带有前导_
的文件名。
如何首先使ls排序下划线字符?的答案解决了主要的_
问题。
使用壳膨胀绕过ls
排序的解决方案有:
ls -lf _* [!_]*
所以,对于问题中的文件,
ls -lf -1 _* [!_]*
提供与海豚的自然排序相同的排序结果:
$ 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
$
我不知道这是不是完全相同的机制,海豚合并,以提供自然排序。
发布于 2018-05-26 08:42:31
“自然排序”检测文件名中的数字,并在这部分文件名上使用数字排序,因此010.txt和10.txt位于4.txt (10 > 4)之后。
1<2< 10,mov001和mov01A优于mov002和mov010。
0<1< 10,因此_0mov00A < _1mov00A < _010.txt
等。
https://askubuntu.com/questions/1040499
复制相似问题