Это не проблема, но мне просто любопытно.
Почему алфавитный список файлов отличается среди программ?
Появляется мне, как будто каждая программа реализует свой собственный подход для алфавитной сортировки имен файлов. Возможно, они вытекают из библиотек, на которые программы тянут. Очевидно, у них есть другая таможня для обработки символов как "_" или "-". Я думаю, что это немного нечетно, что они не последовательны.
Вот пример. Я создаю 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
Однако в Наутилусе, который инвертируется
Но в Geeqie, я рассматриваю то же как в Bash:
В то время как 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
Есть ли различные философские школы о том, как это должно быть сделано или является ими просто случайные различия?
По-видимому, они используют различные локали для переменной среды 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, как используется программой. Меня оставляют безмолвным здесь.