Kubuntu 18.04: Как файловый менеджер Dolphin сортирует файлы "естественно"?
У меня есть следующие файлы:
$ ls
_010.txt 01.txt 10.txt 1.txt 3.txt mov001 mov00a _mov00A mov00B mov01A
010.txt _0mov00A _1mov00A 2.txt 4.txt mov002 mov00A mov00aA mov010
$
я использовал ls -1
сам по себе или предшествует различным LANG=
параметры и порядок файлов, как показано ниже:
ls -1 |
ls -1 LANG=en_GB.utf8 | ls -1 LANG=C
ls -1 LANG=en_US.utf8 | ls -1 LC_ALL=C
---------------------------------------
_010.txt | 01.txt
010.txt | 010.txt
01.txt | 1.txt
_0mov00A | 10.txt
10.txt | 2.txt
_1mov00A | 3.txt
1.txt | 4.txt
2.txt | _010.txt
3.txt | _0mov00A
4.txt | _1mov00A
mov001 | _mov00A
mov002 | mov001
mov00a | mov002
mov00A | mov00A
_mov00A | mov00B
mov00aA | mov00a
mov00B | mov00aA
mov010 | mov010
mov01A | mov01A
Но когда я использую Natural sorting
(Dolphin Preferences > General > Sorting Mode) Dolphin 17.12.3, которая является версией Kubuntu 18.04 по умолчанию, я получаю другой порядок сортировки, как показано на Name
столбец на изображении ниже:
Мой вопрос: как Dolphin достигает такой сортировки?
В " Руководстве по дельфинам" особо нечего сказать:
Режим сортировки контролирует порядок сортировки элементов в представлении. Если включена естественная сортировка, порядок сортировки трех примеров файлов будет
File1,
File2,
File10.
Если эта опция отключена, будет использоваться обычная алфавитная сортировка с учетом регистра или без учета регистра, что приводит к порядку сортировки
File1,
File10,
File2.
2 ответа
Сортировка для людей: естественный порядок сортировки, обсуждает полезность естественной сортировки, но не рассматривает, как имена файлов с ведущими _
перечислены перед другими файлами.
Ответы на Как мне сделать ls sort подчеркивания символов в первую очередь? обратиться к ведущим _
вопрос.
Решение, использующее расширение оболочки для обхода любой сортировки ls
имеет:
ls -lf _* [!_]*
Итак, для файлов в вопросе,
ls -lf -1 _* [!_]*
обеспечивает тот же результат сортировки, что и естественная сортировка Dolphin:
$ ls -lf -1 _* [!_]*
_010.txt
_0mov00A
_1mov00A
_mov00A
010.txt
01.txt
10.txt
1.txt
2.txt
3.txt
4.txt
mov001
mov002
mov00a
mov00A
mov00aA
mov00B
mov010
mov01A
$
Я не знаю, является ли это тем же механизмом, который использует Dolphin для обеспечения естественной сортировки.
"Естественная сортировка" обнаруживает числа в именах файлов и использует числовую сортировку в этой части имен файлов, поэтому 010.txt и 10.txt идут после 4.txt (10> 4).
1 <2 <10, поэтому mov001 и mov01A идут перед mov002 и mov010.
0 <1 <10, поэтому _0mov00A <_1mov00A <_010.txt
и т.п.