标题是我想要实现的目标的总结,但我会举一个例子来说明我的问题是什么以及我如何尝试解决它。
示例文件夹
假设我在 Linux 系统上有一个文件夹,其中包含以下文件:.a
,,,,,,和。.A
.b
.B
a
A
b
B
图纳尔
当我在我选择的文件管理器 Thunar 中打开文件夹时,文件按以下顺序显示:
.a
.A
.b
.B
a
A
b
B
这是对我有意义的输出;首先是隐藏文件(或目录),然后按字母顺序排序(考虑大小写)。最好将大写文件排在小写文件之前,但这也不算太糟。换句话说,这是我试图用 实现的输出ls
。
ls
当我想通过列出该文件夹的文件时ls
,我得到的结果如下:
$ ls -lA
total 0
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 .a
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 a
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 .A
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 A
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 .b
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 b
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 .B
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 B
这里,隐藏文件没有排到顶部,但文件整体上是按照“合理”的字母顺序排列的。
尝试LC_ALL=C
和LC_COLLATE=C
将隐藏文件排序到顶部的几个解决方案是临时设置LC_ALL
或LC_COLLATE
为C
(我很难看出两者之间的区别,因此非常感谢您的解释):
$ LC_ALL=C ls -lA
total 0
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 .A
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 .B
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 .a
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 .b
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 A
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 B
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 a
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 b
$ LC_COLLATE=C ls -lA
total 0
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 .A
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 .B
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 .a
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 .b
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 A
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 B
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 a
-rw-r--r-- 1 lucas lucas 0 Jan 26 14:58 b
如您所见,这确实解决了隐藏文件问题,但是字母排序的行为现在与 Thunar 按字母顺序对文件进行排序的方式不一致。
问题
因此,这引出了一个问题:我如何ls
以与 Thunar 相同的方式进行排序?最好避免通过管道传输ls
到另一个命令(如)sort
,因为我想将这个新命令别名为其"ls"
自身。
如果这不可能的话,我怎样才能让 Thunar 按照对文件进行排序的方式ls
对文件进行排序(LC_ALL=C
/LC_COLLATE=C
方法对我来说似乎足够好了)?
进一步说,我想问一下按字母顺序对文件进行排序时的最佳做法是什么。我刚刚描述的行为在我看来是合理的,但也许事实并非如此?