在目录中创建以下文件。
$ touch .a .b a b A B 你好嗎
我的默认ls
顺序忽略了前导点的存在,将它们与其他文件混合在一起。
$ ls -Al
total 0
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 a
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 .a
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 A
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 b
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 .b
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 B
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:06 你好嗎
$ LC_COLLATE=C ls -Al
total 0
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 .a
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 .b
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 A
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 B
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 a
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 b
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:06 你好嗎
不幸的是,这使得排序顺序区分大小写,即A
和B
普瑞森a
和b
。有没有一种方法在不区分大小写的情况下(A
以及before 和)a
先打印点文件?B
b
编辑:尝试修改LC_COLLATE
到目前为止,没有一个答案能完全复制easy的功能ls
。可以想象,我可以将其中的一些包装在一个函数中,但这将必须包含一些详细的代码,例如关于不带参数的工作方式与提供目录作为参数的方式。或如何处理显式-d
标志。
另外,我认为也许可以LC_COLLATE
使用更好。但是,我似乎无法完成这项工作。我目前正在使用LC_COLLATE="en_AU.UTF-8"
。我检查了一下/usr/share/i18n/locales/en_AU
(尽管我不确定这是否是正确的文件,因为我看不到任何引用UTF-8
);我发现了以下内容。
LC_COLLATE
copy "iso14651_t1"
END LC_COLLATE
/usr/share/i18n/locales/iso14651_t1
包含copy "iso14651_t1_common"
。最后/usr/share/i18n/locales/iso14651_t1_common
包含
<U002E> IGNORE;IGNORE;IGNORE;<U002E> # 47 .
我删除了这一行,运行sudo locale-gen
,然后重新启动计算机。不幸的是,这并没有改变。