Создайте следующие файлы в каталоге.
$ 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
чтобы поместить точечные файлы в первую очередь.
$ 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
и a
предшествовать B
и b
)?
Изменить: попытка изменить LC_COLLATE
Ни один из ответов до сих пор полностью не повторяет функционал 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
и перезагрузил компьютер. К сожалению, это ничего не изменило.