![为什么文件按字母顺序列出,而忽略终端中的文件名长度?](https://linux22.com/image/134023/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%96%87%E4%BB%B6%E6%8C%89%E5%AD%97%E6%AF%8D%E9%A1%BA%E5%BA%8F%E5%88%97%E5%87%BA%EF%BC%8C%E8%80%8C%E5%BF%BD%E7%95%A5%E7%BB%88%E7%AB%AF%E4%B8%AD%E7%9A%84%E6%96%87%E4%BB%B6%E5%90%8D%E9%95%BF%E5%BA%A6%EF%BC%9F.png)
为什么文件按字母顺序列出,而忽略终端中的文件名长度?
也许我不应该说“忽略”文件名长度,而是为什么在终端和 GUI 中显示文件有差异。
这当然是一个微不足道的问题,但我对此有点好奇有一段时间了。
在终端中,ls
使用-l
选项(未指定其他排序选项)的普通命令会按字母顺序列出文件,从列表的顶行开始向下移动。假设我有一个充满使用以下内容创建的文件的目录:
$ touch file1{1..16}
ls
在同一目录中将显示以下内容:
-rw-r--r--. 1 user user 0 May 24 11:14 file1
-rw-r--r--. 1 user user 0 May 24 11:14 file10
-rw-r--r--. 1 user user 0 May 24 11:14 file11
-rw-r--r--. 1 user user 0 May 24 11:14 file12
-rw-r--r--. 1 user user 0 May 24 11:14 file13
-rw-r--r--. 1 user user 0 May 24 11:14 file14
-rw-r--r--. 1 user user 0 May 24 11:14 file15
-rw-r--r--. 1 user user 0 May 24 11:14 file16
-rw-r--r--. 1 user user 0 May 24 11:14 file2
-rw-r--r--. 1 user user 0 May 24 11:14 file3
-rw-r--r--. 1 user user 0 May 24 11:14 file4
-rw-r--r--. 1 user user 0 May 24 11:14 file5
-rw-r--r--. 1 user user 0 May 24 11:14 file6
-rw-r--r--. 1 user user 0 May 24 11:14 file7
-rw-r--r--. 1 user user 0 May 24 11:14 file8
-rw-r--r--. 1 user user 0 May 24 11:14 file9
我的问题是为什么“file10”在终端中以这种方式跟随“file1”?在 GUI 环境中查看按名称或类型排序的详细信息或列表视图中的文件时,这些相同的文件会列为“file1”、“file2”、“file3”等。
GUI 中的文件列表似乎按文件名长度按字母顺序排列优先级,从最小长度到最大长度列出文件。它是否正确?这有更多技术原因吗?该ls
命令是否“不遗余力”地按照它的方式对文件进行排序,或者使用 GUI 进行同样的操作?
答案1
默认顺序ls
是按字母顺序排列。在这种情况下,数字不再是数字,而是字符。 sofile1
是一个比 更短的名称file10
,但其他方面相同,因此在列表中位于它之前。
如果您想要自然版本顺序,您可以尝试ls -l --sort=version
(或ls -lv
)
-rw-r--r--+ 1 roaima 0 May 24 18:50 file0
-rw-r--r--+ 1 roaima 0 May 24 18:50 file1
-rw-r--r--+ 1 roaima 0 May 24 18:50 file2
...
-rw-r--r--+ 1 roaima 0 May 24 18:50 file9
-rw-r--r--+ 1 roaima 0 May 24 18:50 file10
-rw-r--r--+ 1 roaima 0 May 24 18:50 file11
-rw-r--r--+ 1 roaima 0 May 24 18:50 file12
-rw-r--r--+ 1 roaima 0 May 24 18:50 file13
还有许多其他排序选项可用ls
;man ls
详情请参阅。