Create the following files in a directory.
$ touch .a .b a b A B 你好嗎
My default ls
order ignores the presence of leading dots, intermingling them with the other files.
$ 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 你好嗎
I can change LC_COLLATE
to put the dotfiles first.
$ 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 你好嗎
Unfortunately this makes the sort order case-sensitive, i.e. A
and B
precede a
and b
. Is there a way to print dotfiles first while staying case-insensitive (A
and a
precede B
and b
)?
Edit: attempting to modify LC_COLLATE
None of the answers so far fully replicate the functionality of ls
easily. Conceivably, I could wrap some of them in a function, but this would have to include some detailed code on (e.g.) how to work with no argument vs. supplying a directory as an argument. Or how to deal with an explicit -d
flag.
Alternatively, I thought that maybe there could be a better LC_COLLATE
to use. However, I can't seem to make that work. I'm currently using LC_COLLATE="en_AU.UTF-8"
. I checked /usr/share/i18n/locales/en_AU
(although I'm not sure if this is the right file, as I can't see any reference to UTF-8
); I found the following.
LC_COLLATE
copy "iso14651_t1"
END LC_COLLATE
/usr/share/i18n/locales/iso14651_t1
contains copy "iso14651_t1_common"
. Finally, /usr/share/i18n/locales/iso14651_t1_common
contains
<U002E> IGNORE;IGNORE;IGNORE;<U002E> # 47 .
I deleted this line, ran sudo locale-gen
, and restarted my computer. Unfortunately, this changed nothing.