алфавитный список отличается среди проножек

Это не проблема, но мне просто любопытно.

Почему алфавитный список файлов отличается среди программ?

Появляется мне, как будто каждая программа реализует свой собственный подход для алфавитной сортировки имен файлов. Возможно, они вытекают из библиотек, на которые программы тянут. Очевидно, у них есть другая таможня для обработки символов как "_" или "-". Я думаю, что это немного нечетно, что они не последовательны.

Вот пример. Я создаю 2 файла, "flop.png" и "flop_drop.png". В оболочке Bash список имеет:

-rw-rw-r--  1 pauljohn pauljohn  3547 Apr  1 21:50 flop_drop.jpg
-rw-rw-r--  1 pauljohn pauljohn  3547 Apr  1 21:50 flop.jpg

Однако в Наутилусе, который инвертируется

enter image description here

Но в Geeqie, я рассматриваю то же как в Bash:

enter image description here

В то время как UNIX находит, что программа соглашается с Наутилусом:

$ find . -name "flo*"
./flop.jpg
./flop_drop.jpg

Я видел различные морщины как это, я не полностью понимаю шаблон. Я распространяюсь, изменения и вывод ls в Bash указывают, что он включает суффиксы в алфавитную сортировку:

-rw-rw-r-- 1 pauljohn pauljohn 3547 Apr  1 21:50 flop_drop.jpg
-rw-rw-r-- 1 pauljohn pauljohn 3547 Apr  1 21:50 flop.jpg
-rw-rw-r-- 1 pauljohn pauljohn 3547 Apr  1 22:14 flop_nop.jpg
-rw-rw-r-- 1 pauljohn pauljohn 3547 Apr  1 22:15 flop_qrop.jpg

Но Наутилус всегда оставляет "flop.jpg" сначала, независимо от того, что следует за подчеркиванием. Я вижу, что Thunar делает то же.

Однако я установил программу просмотра изображений, названную "gwenview" для сравнения. Там, мы получаем что-то совершенно различное. Упорядочивание

flop_drop.jpg
flop_nop.jpg
flop_qrop.jpg
flop.jpg

Есть ли различные философские школы о том, как это должно быть сделано или является ими просто случайные различия?

2
задан 2 April 2017 в 06:30

1 ответ

По-видимому, они используют различные локали для переменной среды LC_COLLATE, которая определяет “ [h], ой представляет в виде строки (имена файлов...) в алфавитном порядке sorted” ( источник ). Можно отобразить доступные локали для системы с locale -a. Следующий пример показывает, как можно изменить настройки для одной команды только (test, файл имеет четыре имен файлов в качестве примера), мой подход должен был бы играть вокруг с этим и определить псевдонимы как alias sort="LC_COLLATE=C sort" при необходимости:

> sort test # my system standard is LC_COLLATE=de_DE.UTF-8
flop_drop.jpg
flop.jpg
flop_nop.jpg
flop_qrop.jpg
> LC_COLLATE=C sort test
flop.jpg
flop_drop.jpg
flop_nop.jpg
flop_qrop.jpg

Этот ответ к связанному вопросу дает хороший обзор локалей, где они определяются и как можно изменить их.

Наутилус однако, по-видимому, имеет ошибка †¦

, Редактирование

find, кажется, игнорирует ручную установку LC_COLLATE:

> find . -name "flop*" # my system standard is LC_COLLATE=de_DE.UTF-8
./flop.jpg
./flop_drop.jpg
./flop_qrop.jpg
./flop_nop.jpg
> LC_COLLATE=de_DE.UTF-8 find . -name "flop*"
./flop.jpg
./flop_drop.jpg
./flop_qrop.jpg
./flop_nop.jpg
> LC_COLLATE=en_EN.UTF-8 find . -name "flop*"
./flop.jpg
./flop_drop.jpg
./flop_qrop.jpg
./flop_nop.jpg

у меня нет абсолютно никакой идеи, почему это действительно ведет себя тот путь, особенно потому что его страница справочника перечисляет LC_COLLATE, как используется программой. Меня оставляют безмолвным здесь.

0
ответ дан 2 December 2019 в 09:13

Другие вопросы по тегам:

Похожие вопросы: