버전 정렬에 사용되는 파일 이름의 접두사, 버전 번호 및 접미사의 정의는 무엇입니까?

버전 정렬에 사용되는 파일 이름의 접두사, 버전 번호 및 접미사의 정의는 무엇입니까?

coreutils 매뉴얼에서,

10.1.4 버전 정렬 세부사항,

버전 순서는 파일 이름에 종종 다음이 포함된다는 사실을 처리합니다. 색인 또는 버전 번호. 표준 정렬은 일반적으로 비교가 문자별로 이루어지기 때문에 예상한 순서를 생성하지 않습니다. 버전 정렬은 이름에 색인/버전 번호가 있는 많은 파일이 포함된 디렉터리를 검색할 때 특히 유용합니다.

$ ls -1       $ ls -1v
abc.zml-1.gz  abc.zml-1.gz
abc.zml-12.gz abc.zml-2.gz
abc.zml-2.gz  abc.zml-12.gz

버전별로 정렬된 문자열을 비교하여 다음과 같은 ver1경우ver2버전 번호그리고접두사그리고접미사(정규 표현식과 일치하는 접미사 ‘(\.[A-Za-z~][A-Za-z0-9~]*)*’)는 문자열이고 ver1<는 ver2 이름이 prefix ver1 suffix이전 순서로 구성됨 을 의미합니다 prefix ver2 suffix.

또한 숫자 부분의 선행 0은 무시됩니다.

$ ls -1        $ ls -1v
abc-1.007.tgz  abc-1.01a.tgz
abc-1.012b.tgz abc-1.007.tgz
abc-1.01a.tgz  abc-1.012b.tgz

이 기능은 filevercmp 주목할 만한 몇 가지 주의 사항이 있는 gnulib의 기능을 사용하여 구현됩니다.

LC_COLLATE무시됩니다. 즉, 숫자가 아닌 값이 정렬 ls -v됩니다 .sort -V접두사LC_COLLATE로케일 카테고리가 로 설정된 것과 같습니다 C.

• 일부접미사위에서 언급한 정규식과 일치하지 않습니다. 따라서 다음 예는 예상한 대로 순서가 지정되지 않을 수 있습니다.

abc-1.2.3.4.7z
abc-1.2.3.7z
abc-1.2.3.4.x86_64.rpm
abc-1.2.3.x86_64.rpm
  1. 파일 이름이 주어지면 접두사, 버전 번호 및 접미사의 정의는 무엇입니까?
  2. 접미사의 경우 정규 표현식 ‘(\.[A-Za-z~][A-Za-z0-9~]*)*’에서

    • 무슨 뜻이에요 ~?
    • 정규식의 일부 인가요 ?

    정규식 구문이 어딘가에 소개되어 있나요?

  3. 이 세 가지 예에서 파일 이름 접두사, 버전 번호 및 접미사는 무엇입니까?

  4. 마지막 예, 마지막 경고에서 파일 이름이 버전별로 정렬되는 방식으로 정렬되는 이유는 무엇입니까?

감사해요.

답변1

물론 이것은 설명하기 어렵습니다.

소스 코드를 읽어야만 궁극적인 교화를 이룰 수 있습니다.https://github.com/gagern/gnulib/blob/master/lib/filevercmp.c. 원래:

접미사는 일치하는 가장 긴 문자열입니다 (\.[A-Za-z~][A-Za-z0-9~]*)*$. 이를 위해서는 $파일 이름 끝에 일치 항목이 있어야 합니다. 접미사에서 점으로 구분된 부분은 비교 목적으로 버전 번호로 간주됩니다.

이는 ~파일 이름에 나타날 수 있는 문자 하나만입니다. 이는 때때로 버전 번호에 사용됩니다 3.4.1~alpha.

마지막 예, 마지막 경고에서 파일 이름이 버전별로 정렬되는 방식으로 정렬되는 이유는 무엇입니까?

_접미사 문자는 허용되지 않으므로 로 끝나는 파일은 버전 이 없는 파일(또는 버전이 있는 파일만) x86_64.rpm로 처리됩니다 . rpm대체 항목으로 사전순으로 정렬되지 않은 이유는 명확하지 않습니다.

관련 정보