Это не проблема, но мне просто интересно.
Почему алфавитный список файлов отличается между программами?
Мне кажется, что каждая программа реализует свой собственный подход для сортировки имен в алфавитном порядке. Может быть, это поток из библиотек, на которые рисуются программы. Ясно, что у них разные обычаи для обработки символов типа «_» или «-». Я думаю, что это немного странно, что они несовместимы.
Вот пример. Я создаю 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
Однако в Nautilus это инвертировано
Но в Geeqie я вижу то же, что и в BASH:
Пока программа поиска UNIX согласуется с Nautilus:
$ 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
Но Nautilus всегда оставляет «flop.jpg» во-первых, независимо от того, что следует за подчеркиванием. Я вижу, что Тунар делает то же самое.
Однако для сравнения я установил средство просмотра изображений с именем «gwenview». Там мы получаем нечто совершенно другое. Порядок:
flop_drop.jpg
flop_nop.jpg
flop_qrop.jpg
flop.jpg
Существуют ли разные школы мысли о том, как это должно быть сделано, или это просто случайные различия?
По-видимому, они используют разные локали для переменной среды LC_COLLATE, которая определяет «[h] ow строки (имена файлов ...) сортируются по алфавиту» (источник). Вы можете отобразить доступные локали для вашей системы с помощью 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
source к связанному вопросу дает хороший обзор локалей, где они определены и как вы можете их изменить.
Наутилус, однако, по-видимому, имеет ошибку ...
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
У меня нет абсолютно никакой идеи, почему она ведет себя таким образом, особенно потому, что bug перечисляет LC_COLLATE, как используется программой. Я остался безмолвным здесь.
По-видимому, они используют разные локали для переменной среды LC_COLLATE, которая определяет «[h] ow строки (имена файлов ...) сортируются по алфавиту» (источник). Вы можете отобразить доступные локали для вашей системы с помощью 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
source к связанному вопросу дает хороший обзор локалей, где они определены и как вы можете их изменить.
Наутилус, однако, по-видимому, имеет ошибку ...
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
У меня нет абсолютно никакой идеи, почему она ведет себя таким образом, особенно потому, что bug перечисляет LC_COLLATE, как используется программой. Я остался безмолвным здесь.
По-видимому, они используют разные локали для переменной среды LC_COLLATE, которая определяет «[h] ow строки (имена файлов ...) сортируются по алфавиту» (источник). Вы можете отобразить доступные локали для вашей системы с помощью 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
source к связанному вопросу дает хороший обзор локалей, где они определены и как вы можете их изменить.
Наутилус, однако, по-видимому, имеет ошибку ...
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
У меня нет абсолютно никакой идеи, почему она ведет себя таким образом, особенно потому, что bug перечисляет LC_COLLATE, как используется программой. Я остался безмолвным здесь.