노틸러스는 이름별로 파일을 정확히 어떻게 정렬합니까?

노틸러스는 이름별로 파일을 정확히 어떻게 정렬합니까?

Nautilus(GNOME 파일)가 완전히 알파벳순으로 정렬되지 않은 것으로 나타났습니다.

$ touch 1
$ touch 2
$ touch 3
$ touch '!2'

그러면 파일이 다음 순서로 표시됩니다 !2 1 2 3. !ASCII 코드가 숫자보다 작으므로 완전히 알파벳순입니다 . 파일을 더 추가해 보겠습니다.

$ touch a
$ touch b
$ touch c
$ touch '!b'

이제 파일이 다음 순서로 표시됩니다 !2 1 2 3 a !b b c. 이 표시는 앞뒤에 !b표시됩니다 . 이는 파일이 더 이상 알파벳순으로 완전히 정렬되지 않음을 의미합니다.ba

$ touch 01
$ touch 02
$ touch 001
$ touch 002

!2 1 01 001 2 02 002 3 a !b b c. 처음에는 숫자가 알파벳 순서로 되어 있는 것처럼 보였지만 0으로 시작하는 파일을 추가한 후에는 이러한 이론이 깨졌기 때문에 이는 훨씬 더 혼란스럽습니다.

흥미롭게 ls도 그는 노틸러스의 의견에 동의하지 않았습니다.

$ which ls
/usr/bin/ls
$ ls
 001   002   01   02   1  '!2'   2   3   a   ab   ac  '!b'   b   ba   c

노틸러스는 여기서 어떤 알고리즘을 사용하고 있습니까 ls? Debian stable Gnome 문서 버전 43.2.

답변1

기본적으로 'ls'는 'sort'에서 사용하는 것과 동일한 libc 로캘별 정렬 순서를 사용합니다. 모든 *.UTF-8로케일(와는 별개로 C.UTF-8), Glibc는 구현합니다.유니코드 정렬 알고리즘(또는 다른 것그것에 가까운)는 현재 로케일에 맞춰집니다.

(예를 들어 'LC_COLLATE' 섹션을 참조하세요.로케일데이터/로케일/es_ES.)

ls출력을 LC_COLLATE=C.UTF-8 ls(또는 )과 LC_COLLATE=C ls비교하십시오 .

Nautilus에서 사용하는 알고리즘은 다음을 중심으로 회전합니다.g_utf8_collate_key_for_filename()GLib2에서 제공됩니다. 이것은 또한 로케일 기반이지만 소스 코드에는 "자연스러운" 숫자 순서도 제공됩니다.설명하다작동 방식.

(노틸러스에도 있습니다.추가 코드도트 파일과 백업 파일(예: .*sums #*)은 항상 도트가 아닌 파일 다음에 정렬되며 데이터 정렬 키보다 우선순위가 높습니다. )

GNU 'ls'에는 -vNautilus와 비슷하게 숫자를 처리하는 "자연(버전)" 정렬 옵션이 있습니다(그러나 항상 로케일 순서보다는 ASCII 순서를 사용합니다). 마찬가지로 "sort"에도 가 있습니다 -V.

이것은 완전히 알파벳순입니다! ASCII 코드로 표현된 숫자보다 작음

이것은 따르지 않습니다. ASCII 코드로 정렬아니요"알파벳순으로 정렬". 기껏해야자연유형. (IBM이 자사 PC에서 EBCDIC를 사용하지 않는다는 점을 다행이라고 생각하세요...)

우선, ASCII 순서가 Z앞에 옵니다 a. 이는 영어에서도 분명히 알파벳이 아닙니다. (두 경우 모두 로케일 인식 순서가 사용되는 AaBbCc..반면, ASCII 순서는 C 또는 C.UTF-8을 로케일로 지정하여 강제로 적용됩니다 ABC..Zabc...)

또한 내 이름에는 ASCII가 아닌 알파벳 문자가 포함되어 있습니다. "ASCII 순서로 알파벳순으로 정렬"은 정의되지 않은 작업이며 유니코드 코드 포인트 순서로 정렬해도 결과는 다음과 같습니다. 언어를 구사합니다. (올바른 순서는 U+0065 < U+0117 < U+0066입니다.) "ASCII"의 "A"는 "문자"가 아니라 "America"를 의미한다는 점을 기억하세요.

반면에 ASCII 순서에는 실제로 알파벳에 속하지 않는 문자가 포함되므로 알파벳 순서에 가중치가 없습니다.

이 표시는 앞뒤에 !b표시됩니다 . 이는 파일이 더 이상 알파벳순으로 완전히 정렬되지 않음을 의미합니다.ba

완전히 알파벳순으로 정렬되므로 및 둘 모두 !알파벳이 아닌 문자 와 동일한 가중치를 갖습니다 .b!b

관련 정보